k9y*_*osh 14 android alarmmanager android-jobscheduler
我的应用程序有一个后台service
运行,可以让用户保持最新状态location
并每隔五分钟将其更新一次.要location
连续运行此更新过程,我使用警报管理器从其service
自身设置下一个执行时间.然而,当我在安装应用程序Nokia 6
运行Android 8.1
它工作了一段时间,如果我保持手机闲置一段时间后,我service
将得到与应用程序的下一个警报也被从系统中清除杀死alarm manager
.我的猜测是空闲时间使手机进入doze mode
.但是,我不明白警报管理员为何被清除.根据我的理解,doze mode
应定期打开维护窗口以执行任何待处理的任务.
为了缓解这个问题,我试图应用JobScheduler
service
之上AlarmManager
,其中每15分钟运行.这样做的目的jobscheduler
是重新启动service
其中的alarmmanager
内容,因此即使它被杀死并且警报被清除,jobscheduler
也会重新启动service
.
在我测试了这个补丁并保持一段时间之后idle mode
,它导致了两者JobScheduler
Service
并且Service
其中的警报被预定的作业和警报从系统中清除而被杀死.
在Android文档中我们可以使用它JobScheduler
来减轻其后台执行限制.为了测试这个,我services
在测试应用程序时强制杀死了两个,但是已经预定的作业没有被清除,并且它使service
警报再次成功运行.我不明白这种行为的原因,虽然Evernote的家伙给出的解释可以在这里安排这个场景Android Job by Evernote
对这种异常行为的任何想法?
测试环境细节
Nokia 6 (TA-1021)
Android 8.1.0
在 Doze more 中,警报不会重置,而是推迟到稍后的时间。您在这里有两个主流选择:
使用setAndAllowWhileIdle()
或setExactAndAllowWhileIdle()
。然而,它们也可以以每 9 分钟 1 次的最大频率发射。因此,您必须降低在应用程序中获取位置的频率。
通过显示前台通知的方式使用前台服务。每个人都这样做(例如 Uber、Google 地图等应用程序)。这样,您的服务就不会被终止,并且会被视为您打开了一个应用程序。
归档时间: |
|
查看次数: |
6534 次 |
最近记录: |