У меня есть предпочтение переключателя, которое должно запускать / останавливать некоторые внутренние работы службы. Сервисный API (Binder) инициализирован в onServiceConnected
, как и ожидалось. Но когда я перехожу на экран настроек, отсоединяюсь и останавливаю сервис.
Я использую LiveData
для обработки изменений предпочтений в основной деятельности. Но проблема в том, что когда он снова станет активным и будет вызван наблюдатель, onServiceConnected
по-прежнему не вызывается, а ServiceApi(Binder)
, который необходим LiveData
наблюдателю для запуска / остановки чего-либо, не инициализируется.
Как правильно вносить изменения в службу Android путем изменения предпочтений?
public class CameraServiceConnection implements ServiceConnection {
public CameraServiceApi cameraServiceApi;
@Override
public void onServiceConnected(ComponentName name, IBinder service){
cameraServiceApi = (CameraServiceApi) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
cameraServiceApi = null;
}
@Override
public void onBindingDied(ComponentName name) {
cameraServiceApi = null;
}
}
In MainActivity:
LiveData<Boolean> fpsEnabled = new SharedPreferenceBooleanLiveData(prefs, "fpsEnabled", false);
fpsEnabled.observe(this, this::onFpsEnabled);
private void onFpsEnabled(boolean enabled) {
// cameraServiceApi is always null here! will be initialized later
if (cameraServiceConnection.cameraServiceApi != null) {
if(enabled) {
cameraServiceConnection.cameraServiceApi.init();
}
}
}