Androidのライフサイクルの戦闘と高度の使用

序文

Androidのライフサイクルは、詳細な使用しています

AndroidのLiveDataはコメントを使います

Androidのライフサイクルソース解剖

Androidのlivedataソース解剖

Androidのライフサイクルの戦闘と高度の使用

githubのサンプル地址:ArchiteComponentsSample

Androidのアーキテクチャのコンポーネント、および我々はすでに私たちは、プロジェクトのライフサイクルライの戦闘を見てみましょう、今日、ライフサイクル、LiveDataの使用と原理を説明しました。主に上の2点

  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);
    }
}

Androidの技術の人々、1軒の手に負えないコード農家。

2050203-4b5847574e12ec5a.png
Androidの技術の人々

おすすめ

転載: blog.csdn.net/weixin_33785108/article/details/90895761