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

Я использовал 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() внутри метода приема приемника сигналов тревоги. Так что это также не помогает мне решить эту проблему. Как только я выхожу из приложения, моя запланированная задача таймера отменяется.

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

Пожалуйста помоги мне с этим.


person M Vignesh    schedule 22.01.2015    source источник
comment
Запустите службу из метода onReceive и запустите timertask   -  person Praveena    schedule 22.01.2015
comment
Application Alarm Manager будет запущен при срабатывании намерения, даже если приложение было закрыто. Моя проблема заключается в том, что когда я закрываю свое приложение после того, как задача таймера была запланирована, запланированная задача таймера отменяется.   -  person M Vignesh    schedule 22.01.2015
comment
это очевидно .. потому что задача таймера не является фоновым процессом   -  person Praveena    schedule 22.01.2015
comment
Вместо использования задачи таймера у меня задерживается сообщение обработчика пользователя. Мое приложение работает нормально даже после закрытия приложения. Но как только запланировано сообщение с задержкой, я выйду из своего приложения, чтобы отменить сообщение с задержкой.   -  person M Vignesh    schedule 22.01.2015


Ответы (1)


Если вы запланируете намерение с помощью 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"/>
person Psypher    schedule 22.01.2015
comment
У меня есть задача таймера внутри метода onreceive, запуск которой запланирован через 10 секунд. Когда я закрываю приложение на 5-й секунде, запланированная задача таймера также отменяется, и через 10 секунд она не запускается. Но при следующей итерации приемник тревоги работает нормально. - person M Vignesh; 22.01.2015
comment
Я приобрел блокировку пробуждения во время установки Alarm Manager. И выпускать его в то время, когда менеджер будильника отменил. - person M Vignesh; 22.01.2015
comment
Зачем вам нужно запускать Timertask в alarmreceiver? Настройте ваш Alarmreceiver на запуск на 10-й секунде, чтобы обновить ваш пользовательский интерфейс без каких-либо таймеров. - person Psypher; 22.01.2015
comment
Я работаю над приложением с учетом местоположения. У меня уже есть приемник сигналов тревоги, который запускается каждую минуту, чтобы получить информацию о местоположении. В течение первых 10 секунд этого приемника сигналов тревоги я должен получить местоположение от сетевого провайдера. Следующие 10 секунд от провайдера GPS. Это плохая практика - устанавливать разные приемники сигналов тревоги внутри одного приемника сигналов тревоги. А также он будет потреблять больше энергии. - person M Vignesh; 22.01.2015
comment
Вы вызывали администратора тревог, используя намерение? Просто опубликуйте свой код для вызова менеджера тревог. Другой вариант, который следует рассмотреть, — это вызвать службу по тревоге для выполнения вашей задачи, после завершения задачи закрыть службу. - person Psypher; 24.01.2015