四、android层源码解析
在linux之上经过android的软件堆层层封装,最终在上层的java应用程序中使用。休眠唤醒也是从最上层发出的命令,然后一层一层地将参数解析,往最底层传,最后走上标准linux的休眠唤醒之路。
这一部分将会初略分析休眠唤醒机制上linux之上所走的路线。
在linux之上,存在一个hal层,专门做和linux内核设备打交道的事情,这里也不例外。休眠唤醒机制的hal层源码位于:@hardware/libhardware_legacy/power/power.c
该文件源码比较简单,下面列举重点片段:
Hal层的代码在jni层中被使用,源码位于:frameworks/base/core/jni/android_os_Power.cpp,代码片段如下:
Jni的方法需要注册到上层才可以使用,同时也需要在上层的对应java类中声明了native才可以使用。那么这里的方法在java中对应的声明在哪里呢?frameworks/base/core/java/android/os/Power.java,该文件定义一个java类,如下:
声明的jni接口应该是被java server在使用,这里就是专门的电源管理服务:PowerManagerService使用,具体源码位置在:frameworks/base/services/java/com/android/server/PowerManagerService.java。android在最上层还提供了现场的android.os.PowerManager类
(frameworks/base/core/java/android/os/PowerManager.java)来供app使用,PowerManager类会调用java服务PowerManagerService的方法来完成与wakelock相关的工作。
@ frameworks/base/core/java/android/os/PowerManager.java
类PowerManager中内嵌了一个WakeLock类,另外还定义了wakelock的类型,下面是代码片段:
应用实例:
接下来就会调用到java服务PowerManagerService中:
releaseWakeLockLocked(lock, flags, false)函数会调用power类的方法:
上层休眠唤醒都是调用PowerManagerService类的方法:
goToSleep()
à goToSleepWithReason()
à goToSleepLocked()
à setPowerState()
à setScreenStateLocked()
à Power.setScreenState()
à jni方法
Android层的代码分析得不是很详细,这里只关注框架和流程。下图是网上的一个框架,可以参考一下:
分享到:
相关推荐
android_和linux的休眠唤醒机制
Linux Kernel and Android 休眠与唤醒 Linux Kernel and Android 休眠与唤醒
休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状 态来延长电池的续航时间.这篇文章就详细介绍一下Linux中休眠/唤醒是如何工作 的, 还有Android中如何把这部分和Linux的机制联系起来的.
android和linux的休眠唤醒机制.pdf
android和linux的休眠唤醒机制借鉴.pdf
休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状 态来延长电池的续航时间.这篇文章就详细介绍一下Linux中休眠/唤醒是如何工作 的, 还有Android中如何把这部分和Linux的机制联系起来的.
转载: 文章介绍了linux和android休眠唤醒过程 包括过程中涉及到的文件和函数
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
此外,Android和iOS实现可在主程序包中找到,而Web实现则在。 此仓库中的软件包如下: 包裹 实作 主插件包+ Android和iOS实现 macOS实施 基本的API定义和消息处理 网络实施 贡献 如果您想为这个插件,请遵循...