我想每天(每 24 小时)运行一些代码。问题是如果用户不打开应用程序。如何在应用程序未打开时运行代码?
最佳答案
在 android 中运行后台周期性任务你可以使用多种方式,其中一些是:
- JobScheduler(仅适用于 API 21 或以上)
Android 已在 API 21 上为文档添加此类,此处为 link .
- JobSchedulerCompat - 用于 API 11 或更高版本的 JobScheduler 库的反向端口
您可以找到有关图书馆的所有信息 here .
- 使用报警管理器处理周期性任务
您还可以使用AlarmManager
来安排周期性任务。已发布实现它的完整文章 here .
- 使用 GCM(Google Cloud Messaging) Network Manager 安排周期性任务。
你可以看看这个文档link实现它。
使用 GCM 网络管理器的定期任务示例
在您的项目级 build.gradle 中添加依赖项。
compile 'com.google.android.gms:play-services-gcm:7.5.0'
创建一个扩展到GcmTaskService
的java类
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);
关于android - 每天在应用未打开时运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275418/