在Android开发中,常常需要开机自动启动一些服务,有的希望早点启动,有的需要晚一点启动。如何控制服务的启动时间呢?

首先了解下init.rc的启动流程

1) early-init    a) wait_for_coldboot_done    b) property_init    c) keychord_int    d) console_init    e) set_init_properties2) init3) late-init4) early-fs5) fs6) post-fs    f) property_service_init    g) signal_init    h) check_startup7) early-boot8) boot9) service

init.rc中的程序大致会按照这个顺序执行,靠前的(early-init init)是在init.cpp中触发启动的,后面的是在这些命令靠

trigger来触发的。

service有class core、main、hal 、default 、late_start等这些service也是通过on boot 中class_start来统一启动的。

 

还有一种就是on property:  例如on property:sys.boot_completed=1,是通过设置系统属性来触发启动的

 

基本上通过以上几种方法就可以实现service或command的启动时间了,但是有时我们的程序需要在一个特定时间启动,但我们又没有合适的属性来用(on boot 、class main 、on property:sys.boot_completed=1等)。

例如:我们希望我们的程序越早启动越好,但又不能太早,太早有些资源未就绪,太晚影响用户体验,假设我们需要在进入桌面前启动程序,程序完成工作需要4s时间左右,但程序所需资源在9s时才就绪。以下是记录的各属性触发的数据,

#5s#on boot#    start ril-daemon#6s#class core#7s#class main#17s#on property:sys.boot_completed=1#    start ril-daemon#17s#on property:dev.bootcomplete=1#    start ril-daemon#16s#on property:init.svc.bootanim=stopped#    start ril-daemon

我们知道当bootcomplete=1时,也就进入桌面了,我们程序希望在9s~13s(17-4)之间启动,但是我们找不到一个合适的属性

通过抓log看在9s~13s之间启动了哪些service,就找到一个webview_zygote32。但是我们找不到这个webview_zygote32是如何触发的(或者在代码内触发,而我们又不想改动代码)。而我们又想依赖这个webview_zygote32一起启动,该如何做呢?

init.rc提供了一种监测服务状态的属性,on property:init.svc.webview_zygote32=running,通过这个就可以当webview_zygote32启动时来启动我们自己的程序。

除了这个,还有init.action   表示正在执行的action   init.command  表示正在执行的命令

 

一种监听设备节点创建后再启动service的方法:

on device-added-/dev/compass 
start akmd 

参考:https://blog.csdn.net/eliot_shao/article/details/53163522

 

 

 

init.rc文件语法:https://www.docin.com/p-709168996.html

更多相关文章

  1. android 软件开机自启动
  2. Android(安卓)Service用法讲解与实例
  3. 关于Android中的四大组件(Activity)
  4. SurfaceFlinger启动过程分析(一)、(二)、(三)、(四)【转】
  5. Android的eclipse插件adt无法启动“No target available”
  6. android intent-filter
  7. Android(安卓)设置秒开全屏启动屏
  8. Android(安卓)使用 MuMu模拟器 进行程序调试
  9. APIcloud 按两次返回键退出程序,android按两次返回键退出程序

随机推荐

  1. android小说阅读源码、bilibili源码、MVP
  2. Android(安卓)SDK 2.0安装(配置图文教程)
  3. Android开发人员必须收藏的国外网站
  4. Android知识图谱:我们到底需要学习哪些And
  5. 如何学习android
  6. 跟着做 Android(安卓)NDK学习入门如此简
  7. Android分割线divider(内含Android虚线分
  8. android布局文件中各属性所代表的意义
  9. Unity与Android(安卓)Studio✨之间那些不
  10. Android初级之路-Android发展史