android 4.1 关机动画实现简述,开机动画停止

frameworks/base/cmds/bootanimation/BootAnimation.cpp

在原来开机动画的基础上,获取动画文件方法

BootAnimation::getAnimationFileName(){

  ...

  state = checkBootState() ? 0 : 1; //若state 为1 调用关机动画

  ...

}

bool BootAnimation::checkBootState(void){
    char value[PROPERTY_VALUE_MAX];
  bool ret = true;
    property_get("sys.shutdown.requested", value, "null"); //若该属性非空,返回false

  if (strcmp(value, "null") != 0) {

     ret = false;

  }

     return ret;

}
有上述可知 如要启动关机动画只需,启动 BootAnimation服务 并且 给sys.shutdown.requested设置一个非空属性即可
-----------------------------------

frameworks/base/services/java/com/android/server/pm/ShutdownThread.java

ShutdownThread一个线程类 在 run方法里面 添加

SystemProperties.set(SHUTDOWN_ACTION_PROPERTY, reason);  //SHUTDOWN_ACTION_PROPERTY为sys.shutdown.requested

点击关机dialog执行

private static void beginShutdownSequence(Context context) {

  ...

  if (FeatureQuery.FEATURE_BOOT_ANIMATION && checkAnimationFileExist()) {

    lockDevice();

    showShutdownAnimation();

    ...

  }

  ...

}

private static void showShutdownAnimation() {

  SystemProperties.set("ctl.start", "bootanim");  //调用开机动画服务 

}

==================================

开机动画停止

frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp

void SurfaceFlinger::bootFinished(){

  ...

  property_set("service.bootanim.exit", "1"); //设置停止动画属性

}

-------------------

frameworks/base/cmds/bootanimation/BootAnimation.cpp

在动画循环中调用方法 checkExit()

void BootAnimation::checkExit() {

  char value[PROPERTY_VALUE_MAX];

  property_get(EXIT_PROP_NAME, value, "0");//EXIT_PROP_NAME为字符串 service.bootanim.exit

  int exitnow = atoi(value);

  if (exitnow) {

    requestExit();

  }

}

原文地址:https://www.cnblogs.com/adamli/p/3253034.html