Java Android上的本机方法如何与电源管理生命周期交互?
当本机方法运行时,Android是否可能进入深度睡眠(CPU睡眠) 如果是,Java Android上的本机方法如何与电源管理生命周期交互?,java,android,c,sockets,java-native-interface,Java,Android,C,Sockets,Java Native Interface,当本机方法运行时,Android是否可能进入深度睡眠(CPU睡眠) 如果是, 本机方法能否使用C调用获取唤醒锁 当本机方法阻止套接字读取数据时,手机会自动唤醒吗 当select或epoll上有本机方法阻止的可用数据时,手机会自动唤醒吗 如果Android在本地方法调用中不考虑睡眠,我如何确保手机可以进入睡眠状态,直到在本地代码中创建的一个套接字准备好接收数据? 一些背景: Android网站的建议是“Android不会挂起执行本机代码的线程。如果正在进行垃圾收集,或者调试器发出了挂起请求,A
- 本机方法能否使用C调用获取唤醒锁
- 当本机方法阻止套接字读取数据时,手机会自动唤醒吗
- 当select或epoll上有本机方法阻止的可用数据时,手机会自动唤醒吗
如果Android在本地方法调用中不考虑睡眠,我如何确保手机可以进入睡眠状态,直到在本地代码中创建的一个套接字准备好接收数据?
一些背景:Android网站的建议是“Android不会挂起执行本机代码的线程。如果正在进行垃圾收集,或者调试器发出了挂起请求,Android将在下次发出JNI调用时暂停线程。”-这似乎是指挂起单个线程,而不是将手机置于挂起/睡眠模式。除此之外,我找不到任何关于挂起/睡眠行为的具体评论。要查找有关Android PowerManagement本机的更多信息,请查看源文档 至于使用本机的wakelock,文档警告您这样做可能会破坏系统的稳定性
User-space本机库(在//device/lib/hardware/中用作Android运行时支持库的任何硬件函数)不应直接调用Android电源管理(见上图)。绕过Android运行时中的电源管理策略将破坏系统的稳定性。
我怀疑,代码本机运行而不是在dvm下运行的事实对睡眠行为没有影响-与此相关的任何内容都将在UI线程上交付,无论如何都必须正确处理。至于在收到数据时唤醒,这实际上取决于在休眠时如何处理特定的网络接口。像google云消息传递这样的花哨的东西应该会导致与API一致的唤醒,但是期望一些随机持久的TCP连接突然有流量来唤醒它似乎更值得怀疑,尽管在某些实现中可能会起作用?