У меня есть служба, которая часто обновляет основной интерфейс активности, передавая значения через LocalBroadCastManager.Следующий метод запускается в Сервисе для передачи значения в Основное действие:
private void updateUI(String statusValue){
broadcastIntent.putExtra("status", statusValue);
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent);
}
В Основное действие я добавил BroadcastReceiver, чтобы получить значение и соответствующим образом обновить пользовательский интерфейс:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String brStatus = intent.getStringExtra("status");
if(brStatus != null){
//Update UI
}
}
}
};
Когда пользователь переходит к другому виду деятельности, получатель широковещательных сообщений не регистрируется, поскольку пользователь не увидит пользовательский интерфейс.Затем onResume()
когда пользователь возвращается к действию, получатель перерегистрируется:
LocalBroadcastManager.getInstance(this)
.registerReceiver(mMessageReceiver, new IntentFilter("speed-stats"));
ОБНОВЛЕНИЕ: пока действие приостанавливается, пользователь может выполнять действия (например, «Пауза»), нажимая «Ожидание содержимого»на текущее уведомление.Это действие обрабатывается в onStartCommand () Сервиса:
case PAUSE_SERVICE :
Log.i(LOG_TAG, "Pause Foreground service.");
startForeground(NOTIF_ID,makeNotification(isRunning = false));
updateUI("paused");
stopSpeed();
break;
Это прекрасно работает, однако я заметил, что пользовательский интерфейс не обновляется, поскольку получатель незарегистрирован, пока действие приостановлено.
Можно ли продолжить эти обновления пользовательского интерфейса, несмотря на паузу?Или можно применить обновления пользовательского интерфейса, как только деятельность возобновится?