android - 如何使用 CPU 在深度 sleep 模式下执行任何操作

标签 android android-asynctask alarmmanager intentservice sleep-mode

我是 android 的新手。我为我的申请苦苦挣扎了大约 3 周。我需要在正常模式和 sleep 模式下发送和接收数据包。 我的应用 必须每 5 秒交换一次数据。我尝试使用 alarmmanager 但在 android 5 上它不起作用。在 android 5 上,间隔会在 60 秒内更改它。这样的解决方案使电池很快磨损。当我使用普通异步任务而不是 IntentService 时,它仅在屏幕为 ONapp 可见时才起作用。当应用程序被隐藏或我点击电源 OFF 时,交换数据停止工作。什么是最佳解决方案?

最佳答案

大多数时候,即使是 RTC_WAKEUP 也无济于事。

当设备处于深度 sleep 模式时适用于我的应用的解决方案:
使用 WakefulBroadcastReceiver结合 AlarmManager。

服务由 startWakefulService() 启动,完成后,它通过调用 completeWakefulIntent(intent) 释放唤醒锁。因此,设备将被允许重新进入休眠状态。

我没有添加任何代码。搜索有关如何将 WakefulBroadcastReceiver 与 AlarmManager 结合使用的示例。甚至 WakefulBroadcastReceiver 文档也有一些模板代码。

同时降低警报频率,这样您就可以避免耗尽太多电池电量。

关于android - 如何使用 CPU 在深度 sleep 模式下执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33919715/

相关文章:

java - 通过闹钟铃声停止设备响铃

android - 一页包含多个 fragment 的 ViewPager "java.lang.IllegalArgumentException: No view found for id"

android - Firebase 电子邮件验证无法正常工作

java - 是否有复杂的 Java WorkQueue API?

android - 从 AsyncTask 显示 Toast 直到事件发生

android - 启动超时已过期,放弃唤醒锁! HistoryRecord 的 Activity 空闲超时。这有什么值得担心的吗?

android - 如何在 Android 中使用单元测试或仪器测试来测试警报管理器

android - 如何在启动后的预定时间打开 Activity

java - 小数点后 8 位 double 的微小添加 : Android

android - 如何以编程方式在 Android 中搜索并连接到特定的 wifi 网络