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
    }
}
}