我想每天(每24小时)运行一些代码。问题是如果用户没有打开应用程序。如何在应用程序未打开时运行代码?
答案 0 :(得分:11)
在android中运行后台定期任务,您可以使用各种方式,其中一些是:
Android在API 21上添加了此类文档,这里的文档是link。
您可以找到有关库here的所有内容。
您还可以使用AlarmManager
来安排定期任务。有关实施它的完整文章已发布here。
您可以查看此文档link来实现它。
使用GCM网络管理器定期执行任务的示例
在项目级build.gradle中添加依赖项。
compile 'com.google.android.gms:play-services-gcm:7.5.0'
创建一个扩展到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);
答案 1 :(得分:1)
实施预定运营的全新方式是使用job scheduler,可从sdk级别21获得。
最近向谷歌播放服务添加了一种更简单(并且后向移植)的执行定期任务的方式(不是这样):network manager。尽管名称如此,但安排非网络相关任务非常有用。
检查
无论网络和设备充电状态如何,都要安排定期任务
部分。