我已经使用计时器在作业调度程序中每隔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;
}
}
答案 0 :(得分:1)
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
我遇到了同样的问题,但是我发现一个解决方案,只需在清单文件中添加这两行即可。
答案 1 :(得分:0)
您尚未提供任何代码。您的工作方式和方式,但是应该使用WorkManager而不是JobScheduler
。 这也是Google推荐的。
即使您的应用被杀死,也会执行在WorkManager中安排的进程。
来自官方文档:
通过WorkManager API,可以轻松指定可延迟的异步 任务以及何时运行。这些API可让您创建任务并 将其交给WorkManager立即运行或在适当的时候运行 时间。例如,某个应用可能需要从以下位置下载新资源 网络不时。使用这些类,您可以设置一个 任务,请选择适合其运行的环境(例如“仅在 设备正在充电并在线”),然后将其交给WorkManager运行 当条件满足时。 即使任务仍然可以运行,即使 如果您的应用被强制退出或设备已重启。
如果您的应用未运行,WorkManager将选择适当的方式来运行 安排后台任务-取决于设备API级别和 包括依赖项,WorkManager可能使用
JobScheduler
,Firebase
JobDispatcher
或AlarmManager
。您无需编写设备逻辑 找出设备具有的功能并选择 适当的API;相反,您可以将任务交给 WorkManager并让它选择最佳选项。
您的要求位于Recurring tasks
下,请检查here以了解如何使用WorkManager
执行重复任务。
答案 2 :(得分:0)
即使您实施WorkManager,您也将无法在已向Redmi之类的用户提供自动启动设置的Custom ROM中运行Background任务。有关更多信息,请检查this