Обозреватель LiveData вызывается до инициализации Service Binder в OnServiceConnected - PullRequest
0 голосов
/ 30 мая 2019

У меня есть предпочтение переключателя, которое должно запускать / останавливать некоторые внутренние работы службы. Сервисный 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();
}
}
}
...