У меня есть служба, которая часто обновляет пользовательский интерфейс основного действия, передавая значения через 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;
Это работает нормально, однако я заметил, что пользовательский интерфейс не обновляется, поскольку получатель не зарегистрирован, пока действие приостановлено.
Можно ли продолжить эти обновления пользовательского интерфейса, несмотря на паузу? Или можно применить обновления пользовательского интерфейса сразу после возобновления деятельности?