在android中运行后台周期性任务你可以使用多种方法,其中一些是:
- JobScheduler(仅适用于 API 21 或更高版本)
Android 在 API 21 上添加了这个类,这里的文档是link https://developer.android.com/reference/android/app/job/JobScheduler.html.
- JobSchedulerCompat - API 11 或更高版本的 JobScheduler 库的向后移植
您可以找到有关图书馆的一切here https://github.com/evant/JobSchedulerCompat.
- 使用警报管理器处理周期性任务
您还可以使用AlarmManager
安排周期性任务。发布了实现它的完整文章here http://www.sitepoint.com/scheduling-background-tasks-android/.
-
使用GCM(Google Cloud Messaging)网络管理器来安排定期任务。
你可以看看这个文档link https://developers.google.com/cloud-messaging/network-manager来实施它。
使用 GCM 网络管理器的定期任务示例
在项目级别的 build.gradle 中添加依赖项。
compile 'com.google.android.gms:play-services-gcm:7.5.0'
创建一个扩展为的 java 类GcmTaskService
public class BackgroundTaskHandler extends GcmTaskService {
public BackgroundTaskHandler() {
}
@Override
public int onRunTask(TaskParams taskParams) {
//Your periodic code here
}
}
在manifest.xml中声明服务
<service
android:name=".BackgroundTaskHandler"
android:exported="true"
android:permission="com.google.android.gms.permission.BIND_NETWORK_TASK_SERVICE">
<intent-filter>
<action android:name="com.google.android.gms.gcm.ACTION_TASK_READY" />
</intent-filter>
</service>
现在将任何班级的定期任务安排为:-
String tag = "periodic";
GcmNetworkManager mScheduler = GcmNetworkManager.getInstance(getApplicationContext());
long periodSecs = 60L;// 1 minute
PeriodicTask periodic = new PeriodicTask.Builder()
.setService(BackgroundTaskHandler.class)
.setPeriod(periodSecs)
.setTag(tag)
.setPersisted(true)
.setUpdateCurrent(true).setRequiredNetwork(com.google.android.gms.gcm.Task.NETWORK_STATE_CONNECTED)
.build();
mScheduler.schedule(periodic);