【问题标题】:How do native methods on Android interact with the power management lifecycle?Android 上的原生方法如何与电源管理生命周期交互?
【发布时间】:2013-08-31 09:34:16
【问题描述】:

Android 是否会在本机方法运行时进入深度睡眠(CPU 睡眠)?

如果是这样,

  • 本机方法能否使用 C 调用获取唤醒锁?

  • 当有数据可用于阻塞套接字读取的本机方法时,手机会自动唤醒吗?

  • 当有数据可用于阻塞 select 或 epoll 的本机方法时,手机会自动唤醒吗?

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

一些背景:

Android 网站的JNI tips 建议“Android 不会暂停执行本机代码的线程。如果正在进行垃圾收集,或者调试器已发出暂停请求,Android 将在下次进行 JNI 调用时暂停线程。” - 它似乎是对单个线程暂停的引用,而不是将手机置于暂停/睡眠模式。除此之外,我找不到任何关于挂起/睡眠行为的特定 cmets。

【问题讨论】:

  • 我的怀疑是,代码在本机运行而不是在 dvm 下运行这一事实对睡眠行为没有影响 - 与此相关的任何内容都将在 UI 线程上交付,无论如何都必须正确处理。至于在接收到数据时唤醒,这实际上取决于特定网络接口在睡眠时的处理方式。像谷歌云消息这样花哨的东西应该会导致与其 API 一致的唤醒,但期望一些随机持久的 TCP 连接突然有流量来唤醒它似乎更令人怀疑,尽管在某些实现中可能有效?

标签: java android c sockets java-native-interface


【解决方案1】:

要查找有关Android PowerManagement Native 的更多信息,请查看源文档

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

至于使用本机唤醒锁,文档警告您这样做会破坏系统的稳定性。

User space native libraries (any hardware function in //device/lib/hardware/ meant to serve as supporting libraries for Android runtime) should never call into Android Power Management directly (see the image above). Bypassing the power management policy in the Android runtime will destabilize the system.

【讨论】:

    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    相关资源
    最近更新 更多