안드로이드 라이프 사이클 전투 및 고급의 사용

머리말

안드로이드 라이프 사이클 자세한 사용

안드로이드 LiveData 댓글 사용

안드로이드 라이프 사이클 소스 해부학

안드로이드 livedata 소스 해부학

안드로이드 라이프 사이클 전투 및 고급의 사용

GitHub의 샘플 地址 : ArchiteComponentsSample

안드로이드 아키텍처 구성 요소, 그리고 우리는 이미 수명주기, LiveData 사용과 원칙, 오늘 설명했다은, 우리가 프로젝트의 라이프 사이클 라이 전투를 살펴 보자. 주로 두 점

  1. LifecycleHandler 패키지
  2. MVP는 자신의 수명주기 활동을 모니터링 할 수 있습니다, 라이프 사이클을 도입

LifecycleHandle 패키지

활동들의 OnDestroy, 수동 removeMessage 또는 removeCallback은을 할 필요가, 그렇지 않으면 메모리 누수하는 경향이 핸들러를 때 때 우리는 일반적으로 사용합니다.

@Override
protected void onDestroy() {
    super.onDestroy();
    mHandler.removeCallbacksAndMessages(null);
}

우리 개발자, 그것은 분명 동작의 반복이. 함께 우리는 라이프 사이클에 의해이 반복 작업을 줄이고 자신의 릴리스 이내에하도록해야합니다.

핵심 원리는 매우 간단합니다, 활동 수명주기에서 내부 모니터가 변경되면들의 OnDestroy 시간에 메시지와 콜백을 제거합니다.

public class LifecycleHandler extends Handler implements FullLifecycleObserver {


    private LifecycleOwner mLifecycleOwner;

    public LifecycleHandler(LifecycleOwner lifecycleOwner) {
        mLifecycleOwner = lifecycleOwner;
        addObserver();
    }

    public LifecycleHandler(LifecycleOwner lifecycleOwner, Callback callback) {
        super(callback);
        mLifecycleOwner = lifecycleOwner;
        addObserver();
    }

    public LifecycleHandler(LifecycleOwner lifecycleOwner, Looper looper) {
        super(looper);
        mLifecycleOwner = lifecycleOwner;
        addObserver();
    }

    public LifecycleHandler(LifecycleOwner lifecycleOwner, Looper looper, Callback callback) {
        super(looper, callback);
        mLifecycleOwner = lifecycleOwner;
        addObserver();
    }

    private void addObserver() {
        if (mLifecycleOwner != null) {
            mLifecycleOwner.getLifecycle().addObserver(new FullLifecycleObserverAstrong textdapter(mLifecycleOwner, this));
        }
    }


    @Override
    public void onCreate(LifecycleOwner owner) {

    }

    @Override
    public void onStart(LifecycleOwner owner) {

    }

    @Override
    public void onResume(LifecycleOwner owner) {

    }

    @Override
    public void onPause(LifecycleOwner owner) {

    }

    @Override
    public void onStop(LifecycleOwner owner) {

    }

    @Override
    public void onDestroy(LifecycleOwner owner) {
        removeCallbacksAndMessages(null);
    }
}

우리는이 코드 줄을보고

mLifecycleOwner.getLifecycle().addObserver(new FullLifecycleObserverAdapter(mLifecycleOwner, this));

이게 무엇 FullLifecycleObserverAdapter?

FullLifecycleObserverAdapter

public class FullLifecycleObserverAdapter implements LifecycleObserver {

    private final FullLifecycleObserver mObserver;

    private static final String TAG = "FullLifecycleObserverAd";
    private final LifecycleOwner mLifecycleOwner;

    FullLifecycleObserverAdapter(LifecycleOwner lifecycleOwner, FullLifecycleObserver observer) {
        mLifecycleOwner = lifecycleOwner;
        mObserver = observer;
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate() {
        Log.i(TAG, "onCreate: ");
        mObserver.onCreate(mLifecycleOwner);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart() {
        Log.i(TAG, "onStart: ");
        mObserver.onStart(mLifecycleOwner);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume() {
        Log.i(TAG, "onResume: ");
        mObserver.onResume(mLifecycleOwner);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause() {
        Log.i(TAG, "onPause: ");
        mObserver.onPause(mLifecycleOwner);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop() {
        Log.i(TAG, "onStop: ");
        mObserver.onStop(mLifecycleOwner);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy() {
        Log.i(TAG, "onDestroy: ");
        mObserver.onDestroy(mLifecycleOwner);
    }

}

FullLifecycleObserver

public interface FullLifecycleObserver extends LifecycleObserver {

    void onCreate(LifecycleOwner owner);

    void onStart(LifecycleOwner owner);

    void onResume(LifecycleOwner owner);

    void onPause(LifecycleOwner owner);

    void onStop(LifecycleOwner owner);

    void onDestroy(LifecycleOwner owner);
}

FullLifecycleObserver는, 우리 자신에 사용자 정의 인터페이스입니다 LifecycleObserver을 상속, 대응 활동 수명주기의 다양한 방법.

FullLifecycleObserverAdapter 활동의 라이프 사이클의 변화가 적절한 콜백 메소드를 할 때, 우리는 다음에서 onCreate 다소 유사한 프록시 모드 내부에 ONSTART 방법 관찰자 콜백, @OnLifecycleEvent 노트를 이용하여, LifecycleObserver을 깨달았다. 다음과 같이 호출 관계가 요약되어 있습니다 :

2050203-5688898a3372a870.png
여기에 설명을 입력

나중에 라이프 사이클 수명주기를 관찰하려면, 다음 만하면 mLifecycleOwner.getLifecycle().addObserver(new FullLifecycleObserverAdapter(mLifecycleOwner, this));코드 줄을

하나는 왜이 디자인을 원하는 않습니다 요청할 수 있습니다

게다가이 인터페이스 FullLifecycleObserver, 주로 순서로 수명주기의 활동에 해당합니다.


LifecyclePresenter 패키지

public class LifecyclePresenter implements IPresenter, FullLifecycleObserver {

    private static final String TAG = "BasePresenter";

    private final LifecycleOwner mLifecycleOwner;

    public LifecyclePresenter(LifecycleOwner lifecycleOwner) {
        mLifecycleOwner = lifecycleOwner;
        mLifecycleOwner.getLifecycle().addObserver(new FullLifecycleObserverAdapter(lifecycleOwner, this));
    }

    @Override
    public void onCreate(LifecycleOwner owner) {
        Log.i(TAG, "onCreate: owner = " + owner);
    }

    @Override
    public void onStart(LifecycleOwner owner) {
        Log.i(TAG, "onStart: owner = " + owner);
    }

    @Override
    public void onResume(LifecycleOwner owner) {
        Log.i(TAG, "onResume: owner = " + owner);
    }

    @Override
    public void onPause(LifecycleOwner owner) {
        Log.i(TAG, "onPause: owner = " + owner);
    }

    @Override
    public void onStop(LifecycleOwner owner) {
        Log.i(TAG, "onStop: owner = " + owner);
    }

    @Override
    public void onDestroy(LifecycleOwner owner) {
        Log.i(TAG, "onDestroy: owner = " + owner);
    }
}

안드로이드 기술 사람들, 하나의 어려운 코드 농부.

2050203-4b5847574e12ec5a.png
안드로이드 기술 사람들

추천

출처blog.csdn.net/weixin_33785108/article/details/90895761