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

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();

  }

}

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值