2013-05-27 2 views
2

Попытка выяснить это на некоторое время. У меня есть приложение, которое запускает обратный отсчет в отдельном service, который вызывает startsForeground, отображая уведомление. Я запустить службу обратного отсчета с помощью кнопки:Продолжайте обновлять интерфейс Android от службы, когда активность закрыта/перезапущена

  Intent i = new Intent(getApplicationContext(), PomoService.class); 
      i.putExtra("EXTRA_MESSENGER", new Messenger(handler)); 
      startService(i); 

и я обновить пользовательский интерфейс с handler, который получил данные расслоение рассказывающие сколько миллисекунд остались в обратном отсчете, посланном через сообщение в методе onTick():

Messenger messenger = (Messenger)extras.get("EXTRA_MESSENGER"); 
     Message msg = new Message(); 
     Bundle b = new Bundle(); 
     b.putLong("remainingTime", millisUntilFinished); 
     msg.setData(b); 
     try { 
      messenger.send(msg); 
     } catch (RemoteException e) { 
      Log.i("error", "error"); 
     } 

И в деятельности:

private Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     long sentTime = msg.getData().getLong("remainingTime"); 
     textCountdownMin.setText(String.format("%02d", (sentTime/1000)/60)); 
     textCountdownSec.setText(":" + String.format("%02d", (sentTime/1000)%60)); 
    } 
}; 

вся установка работает отлично, единственная проблема заключается в том, что если пользователь попадает в спину или отскакивает приложение из списка последних приложений, а затем снова открывает его либо из ящика, либо из текущего уведомления, текст больше не обновляется. Обратный отсчет все еще продолжается, так как я вижу его как из уведомления, которое все еще отображается, так и из-за того, что я использую AlarmManager для разбухания экрана, и это срабатывает правильно.

Любая подсказка о том, какие меры я должен предпринять?

ответ

0

Самый простой способ будет использовать динамический приемник вещания. Создайте динамический БР в своей деятельности, где вы хотите обновить интерфейс вместе с настройкой фильтра намерения вместе с уникальным действием. Затем, когда запускается служба ur, внутри службы создайте новое намерение, установите для него действие, которое было настроено на фильтр намерений, а затем отправит широковещательную передачу.

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