Как сохранить запланированную задачу обработчика отложенного таймера доступной, как только приложение выйдет из метода приема-приема тревог?
Я использовал задачу секундного обработчика с задержкой 20 секунд в методе получения-приема тревоги. Приложение работает нормально, если я выйду из приложения до того, как будет вызван метод приёма приёмника. Если я выйду из приложения, как только запланированная задача "Отложенный пост" будет отложена. Затем задача "Таймер с отложенной обработкой" автоматически отменяется после выхода из приложения. Так что отложенное задание таймера никогда не вызывалось в моем приложении.
Фрагмент кода:
Handler handler= new Handler();
handler.postDelayed(networkRunnable,
10000);
/**
* A runnable will be called after the 10 second interval
*/
Runnable networkRunnable= new Runnable() {
@Override
public void run() {
// Called after 10 seconds
cancelNetworkTask();
// My Job to do after 10 seconds
}
};
После выхода из приложения с момента, когда будет вызван следующий приемный приемник, будет запланирована задача таймера, и она будет работать нормально.
Я пытался использовать goAsync() внутри метода приема-приема тревоги. Так что это также не помогает мне решить эту проблему. Как только я выйду из приложения, моя запланированная задача таймера отменяется.
Как сохранить запланированную задачу обработчика отложенного таймера доступно, как только приложение выйдет из метода приема-приема тревог.
Пожалуйста помоги мне с этим.
1 ответ
Если вы запланируете Intent с AlarmManager, приложение будет запущено при запуске намерения, даже если приложение было закрыто.
Добавьте ниже в вашей деятельности:
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1, alarmIntent, 0);
manager.set(AlarmManager.RTC_WAKEUP, 10000, pendingIntent); //set 10 sec
Создать класс AlarmReceiver
public class AlarmReceiver extends BroadcastReceiver {
PowerManager.WakeLock wl;
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "backgroundwakelock");
wl.acquire();
//put your ui update code here
wl.release();
}
}
Добавить ниже в файл манифеста
<receiver android:name=".AlarmReceiver"/>