私が本当にMVVMアーキテクチャにコンタクトして使用したとき、その人全体は良くありませんでした。個人的には、MVVMはMVCやMVPよりも学習が難しく、デザインの知識も少なからずあると感じています。ゆっくりと自分の成長を記録したいと思います。間違いがあれば修正してください。
ゼロからMVVMアーキテクチャを構築するシリーズ記事(継続的な更新):
AndroidがゼロからMVVMアーキテクチャを構築(1)———— DataBinding
AndroidがゼロからMVVMアーキテクチャを構築(2)———— ViewModel
AndroidがゼロからMVVMアーキテクチャを構築(3)———— LiveData
AndroidビルドMVVMアーキテクチャーをゼロから作成(4)————部屋(エントリーから高度なものまで)
AndroidビルドMVVMアーキテクチャーを最初から作成(5)————ライフサイクル
Androidビルドを最初から作成MVVMアーキテクチャ(6)———— Play Android APIを使用してMVVMフレームワークを構築します(主要記事)
AndroidはMVVMアーキテクチャを最初から構築します(7)———— Play Android APIを使用してMVVMフレームワークを構築します(最終記事)
まだその絵AAC(Androidアーキテクチャコンポーネント)
この記事では、ライフサイクルについて説明します。ライフサイクルを理解して認識した後、最終的にそれをMVVMプロジェクトに適用します。この記事は私自身の要約です。エラーがある場合は、私を修正してください
1.ライフサイクルの紹介と簡単な理解
はじめに:ライフサイクルを認識できるコンポーネントの
役割:アクティビティ/フラグメントなどのライフサイクルコンポーネントを監視し、ライフサイクルが変化したときに他のコンポーネントに通知する
LifecycleOwner、LifecycleObserverを含みます。このようにして理解できます。LifecycleOwnerはオブザーバーです。ソースコード(プロバイダーのライフサイクルを返すので、観察されたと見なすことができるため)を見ることができ、LifecycleObserverをオブザーバーにすることができます。
LiveDataコンポーネントがない場合でも、それを実装する必要がある場合を考えてください。ActivityのライフサイクルがonStartおよびonResumeの場合、LiveDataはアクティブ状態になり、更新されたデータは対応するActivityに通知され
ます。ライフサイクルがonStopまたはonPauseの場合、データ更新は、ライフサイクルがonResumeになるまでコールバックされず、コールバックがすぐにコールバックされます。LiveDataを使用しない場合、この機能を実現するには、コードとアクティビティに一連の判断を記述する必要があります。ライフサイクルがこの機能の実現に役立ったので、使用します。前に説明したLiveData、変更を監視するLiveDataのコードを見てみましょう。
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this这里的类型就是LifecycleOwner,
liveData.observe(this, new Observer<String>() {
//这里就就是一旦被观察者LifecycleOwner的生命周期改变,就会通知观察者liveData调用onChanged。
@Override
public void onChanged(String s) {
}
});
}
これを直接ここで使用できるのはなぜですか?以前にも説明しましたが、バージョン26以降のサポートライブラリでは、LifecycleOwnerがAppCompatActivityおよびSupportActivityに実装され、UIインターフェイスのライフサイクルが内部的に処理されています。次のように、コードを直接入力できます
ここで明確でない場合は、LifecycleOwnerとLifecycleObserverを自分で実装しましょう(内部で既に処理されているGoogleのコンポーネントを知る必要があります)。
2. LifecycleOwnerを自分で実現する(オブザーバーのライフサイクル)
- Actvityを作成し、Activityクラスを継承します。LifecycleOwnerは実装されていないことに注意してください。
- 自分でLifecycleOwnerを実装し、監視対象のライフサイクルを提供する
- LiveDataを新規作成し、LiveDataデータ変更監視を実現します。
- 停止したら、データをLiveDataに投稿します
アクティビティは次のとおりです。
public class LifecyclesActivity extends Activity implements LifecycleOwner {
private MutableLiveData<String> liveData = new MutableLiveData<>();
private LifecycleRegistry mLifecycleRegistry = new LifecycleRegistry(this);
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycles);
liveData.observe(this, new Observer<String>() {
@Override
public void onChanged(String s) {
LogUtils.i("观察LiveData", " ==> " + s);
}
});
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
mLifecycleRegistry.markState(Lifecycle.State.CREATED);
super.onSaveInstanceState(outState);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return mLifecycleRegistry;
}
@Override
protected void onStop() {
super.onStop();
liveData.postValue("运行试试");
}
}
実行して印刷を確認したら、ホームボタンを押して終了し、[戻る]をクリックします。以前のLiveDataと同じ効果が現れました。インターフェイスを離れると印刷されず、インターフェイスに戻るとすぐに印刷されます。
3番目に、LifecycleObserver(オブザーバー)を自分で実装します
すべてのライフサイクルを監視するために、新しいMyObserverを自分で作成します
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
LogUtils.i("MyObserver","onCreate");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
LogUtils.i("MyObserver","onStart");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
LogUtils.i("MyObserver","onResume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
LogUtils.i("MyObserver","onPause");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
LogUtils.i("MyObserver","onStop");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestory() {
LogUtils.i("MyObserver","onDestory");
}
// @OnLifecycleEvent(Lifecycle.Event.ON_ANY)
// public void onAny() {
// LogUtils.i("MyObserver","onAny");
// }
}
次に、Activtiyで、
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycles);
getLifecycle().addObserver(new MyObserver());
}
実行後、プリントを見て、ここにエフェクトを投稿しません。プロジェクトでライフサイクルを使用する場合、上記を考慮する必要はありません。ここで、ライフサイクルの意味を簡単に説明します。Googleは、これらのコンポーネントに対処する必要があるすべてのものをカプセル化しています。