Как сохранить запланированную задачу обработчика отложенного таймера доступной, как только приложение выйдет из метода приема-приема тревог?

Я использовал задачу секундного обработчика с задержкой 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"/>
Другие вопросы по тегам