序文
githubのサンプル地址:ArchiteComponentsSample
Androidのアーキテクチャのコンポーネント、および我々はすでに私たちは、プロジェクトのライフサイクルライの戦闘を見てみましょう、今日、ライフサイクル、LiveDataの使用と原理を説明しました。主に上の2点
- LifecycleHandlerパッケージ
- 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を実現します。次のように呼び出し関係が要約されています。
その後のみ必要、ライフサイクルライフサイクルを観察したい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軒の手に負えないコード農家。