安卓本地方法如何与电源管理生命周期交互?

3

当本地方法运行时,Android是否可能进入深度睡眠(CPU休眠)?

如果可以,

  • 本地方法是否可以使用C调用获取唤醒锁?

  • 当本地方法阻塞在socket读取上时,手机是否会自动唤醒以接收数据?

  • 当本地方法阻塞在select或epoll上时,手机是否会自动唤醒以接收数据?

如果Android在本地方法调用期间不考虑睡眠,那么我该如何确保手机可以进入睡眠状态,直到本地代码中创建的某个套接字准备好接收数据?

一些背景信息:

Android网站的JNI提示建议“Android不挂起执行本地代码的线程。如果垃圾回收正在进行,或者调试器发出了挂起请求,Android将在下一次进行JNI调用时暂停线程。” - 这似乎是对挂起单个线程而不是将手机置于挂起/睡眠模式的引用。除此之外,我找不到关于挂起/睡眠行为的具体评论。


我的怀疑是,代码运行在本地而不是在DVM下对睡眠行为没有影响 - 与此相关的任何内容都将在UI线程上交付,必须正确处理。至于在接收数据时唤醒,这将取决于特定网络接口在睡眠时如何处理。像Google云消息传递这样的高级功能应该会产生与其API一致的唤醒,但期望某些随机的持久TCP连接突然有流量唤醒它似乎更加可疑,尽管在某些实现中可能有效? - Chris Stratton
1个回答

0

如果您想查找有关Android PowerManagement本地化的更多信息,您需要查看源文件。

http://www.kandroid.org/online-pdk/guide/power_management.html

关于从本地使用wakelock,文档警告称这样做可能会破坏系统稳定性。

用户空间本地库(任何位于//device/lib/hardware/中旨在作为Android运行时支持库的硬件功能)不应直接调用Android电源管理(请参见上图)。绕过Android运行时中的电源管理策略将破坏系统稳定性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接