声明
- 前阶段在项目中涉及到了Android系统定制任务,Android系统定制前提要知道Android系统是如何启动的。
- 本文参考了一些书籍的若干章节。
- 本文使用的代码是LineageOS的cm-14.1,对应Android 7.1.2,可以参考我的另一篇博客:如何下载Nexus5的LineageOS14.1(cm-14.1)系统源码并编译、刷机
1 关机和重启
按下电源键,会产生一个中断,然后该中断会被Linux内核捕获到,并被内核转换成一个输入事件,再作为一个EV_KEY/KEY_POWER/DOWN事件传给Android运行时(Runtime)。和其他所有事件一样,该事件会依次交给Android的InputReader和InputDispatcher(这两个都是system server线程),后者会把该事件传递给WindowPolicy对象。如果按键的时间足够长(这个时长是定义在 ViewConfiguration的GLOBAL_ACTIONS_KEY_TIMEOUT上的常量500毫秒)默认的WindowPolicy对象(com.android.internal.policyimpl.PhoneWindowManager)就会拦截到该事件,并(通过调用GlobalActions.showDialog()方法) 在屏幕上弹出一个菜单。
如果用户确实是要关机,