序文
この記事では、あなたがそれを学ぶ必要があるので、基礎LiveDataとViewModelにあるため、ライフサイクルに、開発者のライフサイクル管理活動とフラグメントのライフサイクルを支援するために、ライフサイクルアンドロイドJetpackのアーキテクチャコンポーネントを紹介します。
1.なぜライフサイクル
アプリケーション開発では、プロセスのライフサイクルコードアクティビティまたはフラグメントのアッセンブリは避けられ、公式文書が書かれたアクティビティ監視に、ここで簡単な例を挙げ、活動の異なるライフサイクルでこのメソッドを呼び出しますモニター。
public class MainActivity extends AppCompatActivity {
private MyListener myListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myListener = new MyListener(MainActivity.this);
}
@Override
protected void onStart() {
super.onStart();
myListener.start();
}
@Override
protected void onStop() {
super.onStop();
myListener.stop();
}
}
class MyListener {
public MyListener(Context context) {
...
}
void start() {
...
}
void stop() {
...
}
}
以下に示すように、共通のMVP、別のケースとして。
public class MainActivity extends AppCompatActivity {
private MyPresenter myPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myPresenter = new MyPresenter();
}
@Override
protected void onResume() {
super.onResume();
myPresenter.onResume();
}
@Override
protected void onPause() {
super.onPause();
myPresenter.onPause();
}
}
class MyPresenter{
void onResume() {
...
}
void onPause() {
...
}
}
執筆のこれらの2つの例は、実現することは困難ではない、非常に一般的ですが、実際の開発では、ライフサイクルコールバックは、メソッドなどのアクティビティのライフサイクルは、多くのを置く必要があるかもしれない活動に複数のコンポーネントがあるかもしれません維持するためにそれらを困難にコード、。もう一つの問題は、私たちがコンポーネントに時間のかかる操作を行う場合(例えば、ONSTART方法では)、このようなアプローチは、活動または断片停止する前に開始し、完全なアセンブリを保証することができないということです。だから我々は、このライブラリはライフサイクルで、管理のライフサイクル活動とフラグメントライブラリーを必要としています。
2.ライフサイクルの使い方
それぞれ、導入するライフサイクルライフサイクルライブラリと基本的な使い方を依存しています。
2.1ライフサイクル依存ライブラリ
次のように依存するコードの公式ウェブサイトが与えられます。
dependencies {
def lifecycle_version = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
// alternatively - just ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // For Kotlin use lifecycle-viewmodel-ktx
// alternatively - just LiveData
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
// alternatively - Lifecycles only (no ViewModel or LiveData). Some UI
// AndroidX libraries use this lightweight import for Lifecycle
implementation "androidx.lifecycle:lifecycle-runtime:$lifecycle_version"
annotationProcessor "androidx.lifecycle:lifecycle-compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// alternately - if using Java8, use the following instead of lifecycle-compiler
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
// optional - ReactiveStreams support for LiveData
implementation "androidx.lifecycle:lifecycle-reactivestreams:$lifecycle_version" // For Kotlin use lifecycle-reactivestreams-ktx
// optional - Test helpers for LiveData
testImplementation "androidx.arch.core:core-testing:$lifecycle_version"
}
AndroidXを使用した公式サイトでは、AndroidXを使用するので、例えば、いくつかのモビリティの問題を持ってここにAndroidXを使用していないかもしれないが、lifecycleandroid.arch.lifecycleライブラリの使用は、以下のように。
dependencies {
def lifecycle_version = "1.1.1"
// 包含ViewModel和LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
// 仅仅包含ViewModel
implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
// 仅仅包含LiveData
implementation "android.arch.lifecycle:livedata:$lifecycle_version"
// 仅仅包含Lifecycles
implementation "android.arch.lifecycle:runtime:$lifecycle_version"
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
// 如果用Java8, 用于替代compiler
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
// 可选,ReactiveStreams对LiveData的支持
implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
// 可选,LiveData的测试
testImplementation "android.arch.core:core-testing:$lifecycle_version"
}
実際に、私達は配達に依存してサポートするために、Gradleのため、デフォルトでは、フル書かbuild.gralde(もちろん、すべてが間違っに書き込まれません)にすべてこのコードを配置する必要はありません。私たちは、ライブラリが欠落している場合、別の罰金を追加して行くものを毎日の仕事を、満たすために依存する直接以下を追加します。
implementation "android.arch.lifecycle:extensions:1.1.1"
以下のコードライブラリに依存して、この1を追加します。
2.2ライフサイクルの基本的な使い方
活動を脇に置くとフラグメントはどのように簡単な例のライフサイクルを引用し、使用します。
public class MyObserver implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void connectListener() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void disconnectListener() {
...
}
}
myLifecycleOwner.getLifecycle().addObserver(new MyObserver());//1
MyObserverライフサイクルオブザーバーとなっMyObserver示す、インタフェースLifecycleObserverを実装する新しいクラスを作成します。注次にMyObserverにLifecycleOwnerに1で添加しました。LifecycleOwner内部getLifecycle()、ライフサイクルを取得するためgetLifecycle方法の唯一の方法であるインタフェースであり、したがってライフサイクルライフサイクルの変化は、MyObserverが観察され、または認識されている場合MyObserverライフサイクルに添加してもよいですへ。
あなたがJava8を使用している場合は、代わりにLifecycleObserverをDefaultLifecycleObserverを使用することができます。
class MyObserver implements DefaultLifecycleObserver {
@Override
public void onCreate(LifecycleOwner owner) {
...
}
}
また、build.gradleに「<バージョン>:共通java8 androidx.lifecycle」を追加することを忘れないでください
アプリケーション例3.Lifecycle
2つの例を調製するための応用例では、最初の小節の例では改善されているMVPにおいて活性を使用することです。
使用中の3.1活動
package com.example.lifecycledemo1;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getLifecycle().addObserver(new MyObserver());//1
}
public class MyObserver implements LifecycleObserver{
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume(){
Log.d(TAG, "Lifecycle call onResume");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause(){
Log.d(TAG, "Lifecycle call onPause");
}
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
}
まずON_CREATEとON_RESUMEイベント監視のために、MyObserverを実現。Androidのサポートライブラリのバージョン26.1.0以降、活動およびフラグメントはすでに達成LifecycleOwnerのデフォルトインタフェースは、あなたがMyObserver MainActivityは、変更のライフサイクルを観察することができますので、直接ライフサイクルのオブジェクトを取得するには1つのgetLifecycle方法でコメントで使用できるようにするので、 LifecycleOwnerはMainActivityが観察されている観察、MainActivityデフォルト実装LifecycleOwnerインターフェースとして理解することができます。プログラムを実行すると、以下のように印刷してログインします。
D/MainActivity: onResume
D/MainActivity: Lifecycle call onResume
D/MainActivity: Lifecycle call onPause
D/MainActivity: onPause
ただのonCreateメソッドMainActivityにMyObserverを追加し、その後、MyObserverを観察することができるの変更は、さまざまなライフサイクルをMainActivity。
使用中の3.2 MVP
書き換え可能な第一のバーMVPの例として、以下に示すように、MyPresenterを達成します。
public class MyPresenter implements IPresenter {
private static final String TAG = "test";
@Override
public void onResume() {
Log.d(TAG, "Lifecycle call onResume");
}
@Override
public void onPause() {
Log.d(TAG, "Lifecycle call onPause");
}
}
interface IPresenter extends LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume();
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause();
}
IPresenterインタフェースはLifecycleObserverインタフェースMyPresenterから継承もMyPresenter観察者になるようIPresenterインタフェースを実現しました。その後にMainActivityでMyPresenterに参加します:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "test";
private IPresenter mPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mPresenter = new MyPresenter();
getLifecycle().addObserver(mPresenter);
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
}
何方法は方法ライフサイクルMyPresenter MainActivity複数の呼び出しないように観察されたときに、そのライフサイクルが変更になるMainActivity、MyPresenterは、観察することができます。次のように印刷ログは、次のとおりです。
D/test: onResume
D/test: Lifecycle call onResume
D/test: Lifecycle call onPause
D/test: onPause
4.カスタムLifecycleOwner
カスタムLifecycleOwnerを実装する場合は、あなたがLifecycleRegistryを使用することができ、それはライフサイクルの実装クラスです。Androidのサポートライブラリ26.1.0以降のバージョンでは、活動およびフラグメントは、すでにLifecycleOwnerのデフォルトのインターフェイスを実現し、私たちは書くことができます。
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleRegistry;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MyActivity extends AppCompatActivity {
private LifecycleRegistry lifecycleRegistry;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lifecycleRegistry = new LifecycleRegistry(this);
lifecycleRegistry.markState(Lifecycle.State.CREATED);
}
@Override
public void onStart() {
super.onStart();
lifecycleRegistry.markState(Lifecycle.State.STARTED);
}
@NonNull
@Override
public Lifecycle getLifecycle() {
return lifecycleRegistry;
}
}
新しいLifecycleRegistry、種々の状態によってライフサイクルLifecycleRegistry配置され、getLifecycle法によりLifecycleRegistryを返します。
概要
ライフサイクルの基本的な使用法上のこの記事では、あなたは二つの小さな例による消化を理解するために、プロジェクト内の特定の使用は困難がまだ唯一の原則のライフサイクルで、難しいことではありません
遂に
忍耐と能力、ラ・マイルの長ったらしい私の記事を読んでいただきありがとうございます。
私たちは、学習と共通の進捗状況の仲間の相互交流のAndroidの開発位置であなたに固執して喜んでいます!
ここで私はまた、仕上げのあなたのコレクションのコピーを共有アーキテクチャPDF +動画+インタビュー+ドキュメント・ソース・ノート勉強アンドロイドを、だけでなく、高度な技術アーキテクチャ高度な脳マッピング、テーマの開発とAndroidのインタビューを、高度な材料は、建築を進めてあなたが高度な学習を強化します、だけでなく、学ぶために、情報の検索にオンラインみんなの時間を節約し、あなたはまた、親しい友人が一緒に勉強して共有することができます
あなたが必要としている場合は、次のことができます親指