Можем ли мы сделать android.app.Service как компонент, учитывающий жизненный цикл - PullRequest
0 голосов
/ 09 мая 2018

все, что я получаю от новых компонентов архитектуры Android, это то, что если мы будем информировать о жизненном цикле компонента, то в зависимости от жизненного цикла действия LifecycleObserver будет реагировать на события. Это сокращает объем стандартного кода, который мы пишем в действиях onCreate, onStop или onStart и т. Д. Или в методах жизненного цикла фрагментов.

Теперь, как сделать службу Android осведомленной о жизненном цикле? До сих пор я вижу, что мы можем создать сервис, который расширяет android.arch.lifecycle.LifecycleService. Однако я не вижу ни одного события, связанного с привязыванием и отменой привязки, пока я наблюдаю.

Фрагменты кода

// MY BOUNDED service
public class MyService extends LifecycleService 
        implements LocationManager.LocationListener{

    private LocationManager mLocationManager;
    @Override
    public void onCreate() {
        super.onCreate();
        mLocationManager = LocationManager.getInstance(this, this);
        mLocationManager.addLocationListener(this);
    }

    @Override
    public void onLocationChanged(Location location) {
    }

    @Override
    public IBinder onBind(Intent intent) {
        super.onBind(intent);

    }

    @Override
    public boolean onUnbind(Intent intent) {
    }
    ...
}


public class LocationManager implements LifecycleObserver{
    public interface LocationListener {
        void onLocationChanged(Location location);
    }
    private LocationManager(LifecycleOwner lifecycleOwner, Context context){
        this.lifecycleOwner =lifecycleOwner;
        this.lifecycleOwner.getLifecycle().addObserver(this);
        this.context = context;
    }

    public static LocationAccessProcess getInstance(LifecycleOwner lifecycleOwner, Context context) {
        // just accessiong the object using static method not single ton actually, so don't mind for now
        return new LocationAccessProcess(lifecycleOwner, context);
    }


    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void startLocationUpdates() {
        // start getting location updates and update listener
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void stopLocationUpdates() {
        // stop location updates
    }

}

У меня есть несколько вопросов здесь

  1. Как я могу наблюдать за событиями ON_BIND и ON_UNBIND. как я хотел бы также уменьшить свой сервисный код.
  2. Я что-то не так делаю, Можем ли мы выпустить использование арки жизненного цикла для сервисов

Пожалуйста, помогите мне.

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

из исходного кода LifecycleService и ServiceLifecycleDispatcher

Я думаю

onCreate () - это событие ON_CREATE

onBind (), onStart () и onStartCommand () - это событие ON_START

onDestroy () - это событие ON_STOP и событие ON_DESTROY

0 голосов
/ 10 мая 2018

Класс Service на самом деле имеет только две четности жизненного цикла: ON_CREATE и ON_DESTROY. Обратные вызовы на основе связывателя в Service не являются обратными вызовами жизненного цикла, поэтому их нельзя наблюдать напрямую через LifecycleObserver.

Благодарность @vivart за копание в коде. Он прав: когда происходит связывание, отправляется ON_START. Однако для отмены привязки события жизненного цикла не существует, поэтому вашему сервису необходимо переопределить эти методы для обработки их как событий.

...