2015-01-22 3 views
0

Я использовал 20 секунд Handler Post Delayed Timer task внутри приемника сигнала тревоги приемника. Приложение работает нормально, если я выхожу из приложения до того, как будет вызван приемный метод приема. Если я выйду из приложения после того, как запланирована задание таймера с задержкой отправителя. Затем задание таймера с задержкой обработчика отправителя автоматически отменяется после выхода из приложения. Таким образом, задание по таймеру с задержкой, которое никогда не вызывалось в моем приложении.Как сохранить задание таймера с задержкой по расписанию, доступное после того, как приложение закрывается внутри метода приема-приема сигнала тревоги?

Фрагмент кода:

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

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

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

+0

Запустите сервис от OnReceive метода и там начинают TimerTask – Praveen

+0

Приложение Alarm Manager будет запущено, когда намерение будет запущено, даже если приложение было клооном СЕПГ. Моя проблема. Когда я закрываю приложение после того, как задание таймера запланировано, задача запланированного таймера отменяется. –

+0

thats очевидно .. потому что задача таймера не является фоновым процессом – Praveen

ответ

0

Если вы планируете намерение с 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"/> 
+0

У меня есть задача таймера внутри метода onreceive, который планируется запустить через 10 секунд. Когда я закрываю приложение на 5-й секунде, задача запланированного таймера также отменяется, а затем не срабатывает через 10 секунд. Но во время следующей итерации приемник сигналов тревоги работает нормально. –

+0

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

+0

Зачем вам нужно запустить Timertask в alarmreceiver? Установите будильник для работы на 10-й секунде, чтобы обновить свой интерфейс без какой-либо timertask. – Psypher

 Смежные вопросы

  • Нет связанных вопросов^_^