【发布时间】:2017-02-26 17:28:45
【问题描述】:
我需要一个需要互联网连接并在重新启动后仍然存在的周期性任务。我已经取得了很多成就,但问题是我希望应用程序在我退出后也能继续工作。
如,如果我存在应用程序并关闭 wifi 然后再次将其关闭(如果期限已到),则应触发任务并在后台工作。
这是 startPeriodicTask 方法
public void startPeriodicTask() {
Log.d(TAG, "startPeriodicTask");
// [START start_periodic_task]
PeriodicTask task = new PeriodicTask.Builder()
.setService(MyTaskService.class)
.setTag(TASK_TAG_PERIODIC)
.setPeriod(30L)
.setPersisted(true) // to persist after reboot
.setRequiredNetwork(Task.NETWORK_STATE_ANY )
.build();
mGcmNetworkManager.schedule(task);
// [END start_periodic_task]
}
我只是在检查 playServices 后立即在 OnCreate 中调用此方法
checkPlayServicesAvailable();
startPeriodicTask();
我已将此添加到清单中,以便重新启动后作业仍然存在
<uses-permission android:name="android.Manifest.permission.RECEIVE_BOOT_COMPLETED" />
【问题讨论】:
-
你在哪里调用 startPeriodicTask()?是在 Activity、Service、Receiver 中吗?
-
@MichaelVescovo 我在活动中调用 startPeriodicTask(),特别是在 OnCreate 中,正如我在原始帖子中已经写的那样。然后,`PeriodicTask task = new PeriodicTask.Builder() .setService(MyTaskService.class)` 调用具有 onRunTask() 方法的服务 MyTaskService,该方法将在满足条件时执行(有可用网络且周期为向上)。只要活动在前台,它就可以完美地工作,但如果我退出它就不再工作了。
-
除了最初安装应用程序外,我需要它在后台运行,无需用户干预。除了最初安装应用程序之外,我需要它在后台运行,无需用户干预。
标签: android job-scheduling periodic-task gcm-network-manager gcmtaskservice