Android中持久化周期作业的调度
我想安排持久化的定期作业,这将不依赖于系统重新启动。安排工作的最佳地点是什么?我认为将调度放入Android中持久化周期作业的调度,android,Android,我想安排持久化的定期作业,这将不依赖于系统重新启动。安排工作的最佳地点是什么?我认为将调度放入BOOT\u COMPLETEDBroadcast receiver将“重新调度”作业,这将导致意外行为(至少是冗余的,不是吗?)。是否可能更换了MY\u PACKAGE\ureceiver 谢谢你的建议 编辑 我知道这个解决方案: 但我想要这份工作。我担心这样的情况:你有一个周期性的工作,每24小时运行一次。例如,每4小时重新启动一次设备。因此,每次重新启动后,作业都将重新安排,并且。。。您的作业将永
BOOT\u COMPLETED
Broadcast receiver将“重新调度”作业,这将导致意外行为(至少是冗余的,不是吗?)。是否可能更换了MY\u PACKAGE\u
receiver
谢谢你的建议
编辑
我知道这个解决方案:
但我想要这份工作。我担心这样的情况:你有一个周期性的工作,每24小时运行一次。例如,每4小时重新启动一次设备。因此,每次重新启动后,作业都将重新安排,并且。。。您的作业将永远不会执行,因为计时器已重置。我说得对吗
问题只与作业调度程序有关
BOOT_COMPLETED
是正确的第一步
你可以这样做:
首先,在AndroidManifest.xml中
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
最后,一个广播接收器
用于设备引导
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && intent.getAction() != null &&
intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
myTaskService.setupGcmTasks(context); // Call the static of your service
}
}
}
如果您将代码放置到
重新安排
的位置,则可能会出现重复,只要确保取消当前作业(如果存在)。这样就不会导致意外行为。请检查:-各位,请在编辑后检查我的问题谢谢,但我的意思是使用JobScheduler进行调度。我知道我可以在重新启动后取消任何作业并重新安排,但请再看看我的问题。我希望避免上述情况。我不建议使用JobScheduler(不再)。为什么不在计划任务时保存一个设置,其中包含下一次运行任务的时间。当您收到一个引导完成后,您只需计算下一个运行时间并相应地安排。每当任务触发时,按默认间隔重新安排。
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && intent.getAction() != null &&
intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
myTaskService.setupGcmTasks(context); // Call the static of your service
}
}
}