我想在设备重启后立即重新安排应用程序的警报*。对于此过程,我向本地数据库进行查询,以获取警报详细信息,然后将其设置为AlarmManager
。这些动作必须在后台线程中执行。
所以我尝试了以下方法:
1)我将上面的代码放在JobIntentService
中,并命名为enqueueWork()
,但是显然工作没有立即执行。
2)我将上面的代码放在Service
(在AsyncTask
中)中,并称为startForegroundService
。这似乎可行,但这不是使用基于Android文档的Foreground Service的正确案例。
3)创建一个计划作业,并设置setMinimumLatency(0)
以便立即执行代码。
您认为哪种是立即安排警报的最正确方法?您还有其他建议吗?
*在onReceive()
的{{1}}的{{1}}中。
答案 0 :(得分:0)
作为Android 8.0(API级别26)后台执行限制的一部分, 面向API级别26或更高级别的应用程序无法再注册 清单中隐式广播的广播接收器。
但幸运的是,function isSubsetOf(set, subset) {
return Array.from(new Set([...set, ...subset])).length === set.length;
}
不受上述规则约束。 Source
因此,您可以使用ACTION_BOOT_COMPLETED
动作定义BroadcastReceiver
,然后在ACTION_BOOT_COMPLETED
方法中,使用onReceive
或JobIntentService
将警报调度工作委托给后台线程