Планировщик заданий не работает после убийства моего приложения в Android?
Я использовал таймер для вызова метода с интервалом 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;
}
}
2 ответа
Даже если вы реализуете WorkManager, вы также не сможете запускать фоновую задачу в пользовательском ПЗУ, где пользователю был предоставлен параметр автоматического запуска, такой как Redmi . Для получения дополнительной информации проверьте это
Вы не предоставили код. Что и как делаешь, но вместо JobScheduler
Вы должны использовать WorkManager. Это также рекомендуется Google. Даже если ваше приложение будет убито, процесс, запланированный в WorkManager, будет выполнен.
Из официального документа:
API WorkManager позволяет легко определять отложенные асинхронные задачи и время их запуска. Эти API позволяют создавать задачи и передавать их в WorkManager для немедленного запуска или в подходящее время. Например, приложение может время от времени загружать новые ресурсы из сети. Используя эти классы, вы можете настроить задачу, выбрать подходящие условия для ее запуска (например, "только когда устройство заряжается и подключено к сети") и передать ее в WorkManager для выполнения при выполнении условий. Задание по-прежнему гарантированно выполняется, даже если ваше приложение принудительно завершено или устройство перезагружено.
Если ваше приложение не запущено, WorkManager выбирает подходящий способ планирования фоновой задачи - в зависимости от уровня API устройства и включенных зависимостей, WorkManager может использовать
JobScheduler
,Firebase
JobDispatcher
, или жеAlarmManager
, Вам не нужно писать логику устройства, чтобы выяснить, какими возможностями обладает устройство, и выбрать соответствующий API; вместо этого вы можете просто передать свою задачу в WorkManager и позволить ему выбрать лучший вариант.
Ваше требование подпадает под Recurring tasks
пожалуйста, проверьте здесь, как использовать WorkManager
для повторяющихся задач.
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
Я столкнулся с той же проблемой, но нашел решение, просто добавив эти две строки в файл манифеста.