在我的应用程序中我有一个后台服务,这个服务启动一个线程来进行定期操作(I / O操作无法在UI线程上运行),线程代码如下所示:
while(!stop){
do_io_things();
Thread.sleep(5000);
print_log();
}
我注意到当设备进入睡眠模式时,线程会睡眠超过5秒,有时它会睡眠一分钟左右,但是当设备处于唤醒状态时(即使我的应用程序处于后台),线程仍可正常工作正如所料。我可以通过观察日志来检查这一点。
AFAIK睡眠方法应该承诺传递给它的时间,任何身体是否知道发生了什么? Android系统会在设备处于睡眠模式时延长休眠时间吗?
任何帮助表示赞赏。
编辑:
我尝试检查多个设备,实际上在较新的设备上,由于时间的变化不是很大,因此在运行Kitkat 4.4的旧设备上,睡眠时间的变化非常大。
答案 0 :(得分:2)
如果您想了解电池优化,请阅读以下文章:
https://developer.android.com/training/monitoring-device-state/doze-standby.html
在breaf中,Android设备在几秒钟后就睡着了。即使您尝试使用前台任务唤醒,一些供应商也会终止所有进程。
解决方案:
mutation addCommentToPost { updatePost( id: "POST-1", comments_push: [{ body: "Hello!" }] ) { id, comments { id, body } } }
am = (AlarmManager) ctx.getSystemService(Activity.ALARM_SERVICE); am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, nexttime, pi);
尽管如此,第二种解决方案被所有现代设备杀死。