我已经使用计时器在作业调度程序内以5秒的间隔调用方法。但是作业调度程序仅在应用程序运行阶段运行,如果我杀死应用程序,则作业调度程序无法运行。我杀了我的应用程序后如何运行作业调度程序?
我的代码是:
package com.deemsysinc.firebaseandroid;
import android.app.job.JobParameters;
import android.app.job.JobService;
import android.os.PersistableBundle;
import android.util.Log;
import java.util.Timer;
import java.util.TimerTask;
public class MyJobService extends JobService {
private static final String TAG=MyJobService.class.getSimpleName();
Timer timer;
TimerTask timerTask;
@Override
public boolean onStartJob(JobParameters jobParameters) {
final PersistableBundle persistableBundle=jobParameters.getExtras();
timer=new Timer();
timerTask=new TimerTask() {
@Override
public void run() {
MethodCalling();
Log.d("TheJobStart",persistableBundle.getString("Title"));
}
};
timer.schedule(timerTask,0,15000);
jobFinished(jobParameters,false);
return true;
}
@Override
public boolean onStopJob(JobParameters jobParameters) {
Log.d("TheJobStart","JobCompleted");
return true;
}
}
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
I面临同样的问题,但我找到了一个解决方案,只需在清单文件中添加这两行。
您尚未提供任何代码。你是做什么以及如何做,但你应该使用JobScheduler
而不是WorkManager。它也是谷歌推荐的。即使您的应用程序被杀死,也会执行在WorkManager中安排的进程。
来自官方文件:
WorkManager API可以轻松指定可延迟的异步任务以及何时运行它们。这些API允许您创建任务并将其交给WorkManager立即运行或在适当的时间运行。例如,应用可能需要不时从网络下载新资源。使用这些类,您可以设置任务,为其运行选择适当的环境(例如“仅在设备正在充电和在线”时),并将其交给WorkManager以在满足条件时运行。即使您的应用程序强制退出或设备重新启动,任务仍可保证运行。
如果您的应用程序未运行,WorkManager会选择适当的方式来安排后台任务 - 根据设备API级别和包含的依赖项,WorkManager可能会使用
JobScheduler
,Firebase
JobDispatcher
或AlarmManager
。您无需编写设备逻辑来确定设备具有哪些功能并选择适当的API;相反,您可以将您的任务交给WorkManager,让它选择最佳选项。
你招募qazxsw poi,请检查qazxsw poi如何使用Recurring tasks
进行重复任务。
即使您实现了WorkManager,也无法在自定义ROM中运行后台任务,其中自动启动设置已经提供给用户,如Redmi。有关更多信息,请查看here