web-dev-qa-db-ja.com

ライフサイクルオブザーバーとは何ですか?

Androidの新しいアーキテクチャコンポーネントについて読みました。だから、私はライフサイクルオブザーバーとは何か、そしてなぜ私たちはそれらを必要とするのかを尋ねたかったのですか?どのような場合に役立ちますか?ご回答有難うございます!

14

アプリケーションのライフサイクルイベントにProcessLifecycleOwnerを使用できます。アプリケーションクラスにLifecycler Observerを実装できます

public class MyApplication extends MultiDexApplication implements LifecycleObserver

@Override
public void onCreate() {
    super.onCreate();

    ProcessLifecycleOwner.get().getLifecycle().addObserver(this);

}

// Lifecycleメソッドを追加して、アプリのバックグラウンドイベントとフォアグラウンドイベントを確認します

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void appInResumeState() {
    Toast.makeText(this,"In Foreground",Toast.LENGTH_LONG).show();
}

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void appInPauseState() {
    Toast.makeText(this,"In Background",Toast.LENGTH_LONG).show();
}

// build.gradleファイルに追加

implementation 'Android.Arch.lifecycle:extensions:1.1.1'

// Also In ActivitiesまたはFragment

また、ライフサイクルオブザーバーを実装するさまざまなコンポーネントを作成し、アクティビティのライフサイクルをこれらのコンポーネントに渡すことで、コードの複雑さを軽減するためにそれらを使用することもできます。このようにして、巨大な複雑さをさまざまなコンポーネントに分割できます。

class MainActivity : AppCompatActivity() ,LifecycleObserver{

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        ReduceComplexComponent().registerLifecycle(lifecycle)

    }

}

class ReduceComplexComponent : LifecycleObserver{

    registerLifecycle(lifecycle : Lifecycle){
       lifecycle.addObserver(this)
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    fun resume() {
       Log.d("OnResume","ON_RESUME")
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    fun pause() {
       Log.d("onPause","ON_PAUSE")
    }
}

このようにして、アクティビティをリッスンしたり、個別のコンポーネントでライフサイクルイベントをフラグメント化したりできます。

Activityでライフサイクルインスタンスの現在の状態を手動でフェッチすることもできます。そのためには、そのgetCurrentState()を使用します。

状態にはisAtLeast()メソッドもあり、現在のライフサイクル状態との比較に使用できます。

9
Alok Gupta

これらは、アプリの_Lifecycle events_によるコンポーネントのコールバックとクリーンアップを削減するために使用します。たとえば、Threadからどこかで実行されている_Handler/Runnable_があり、listenerを停止して削除するには、onStop()が呼び出されます。したがって、新しい「Jetpack LifeCycle Architectureコンポーネント」を使用すると、コンポーネント/クラスを「ライフサイクル対応」にすることができ、それを使用してアクティビティ/フラグメントから簡単に制御できます。

上記の詳細情報: https://developer.Android.com/topic/libraries/architecture/lifecycle

1
kevoroid

パーティーには少し遅れるかもしれませんが、ライフサイクルのもう1つの素晴らしいユースケース(明らかなViewModelのものを除く)は、関連するアクティビティが破棄されたとき、または単に画面。

たとえば、ダイアログを作成する静的ファクトリーがあり、ライフサイクルを使用して、ダイアログを閉じることができますホストアクティビティを乱雑にすることなく _Dialog mDialog = ..._やvoid onPause(){ ... if (mDialog !null && mDialog.isShowing()) mDialog.cancel() }などの古いもので

いくつかのコード:

DialogUtils.Java:

_public static void showConfirmDialog(Lifecycle lifecycle, String title, String msg, Runnable okRunnable) {
    AlertDialog dialog = AlertDialog.Builder(mAppContext)
    /* configuration stuff ... */
        .build();

    dialog.show();

    lifecycle.addObserver(new LifecycleObserver() {
          @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
          public void cancelDialog() {
            if (dialog.isShowing()) { // if not already dismissed by main-button tap 
              dialog.cancel();
            }
          }
    });
}
_

MyActivity.Java:

_public class MyActivity extends AppCompatActivity {

    /* stuff... onCreate()... other stuff... */

    private void confirmDeleteUser(User user){
        DialogUtils.showConfirmDialog(
            MyActivity.this.getLifecycle(), // all activities & fragment have lifecycles
            "Confirm Delete",
            "Action cannot be undone. Sure to continue?",
            new Runnable() { /* stuff... */ }
        );
        // Voilà! 
        // activity no needs to store reference to the dialog and cancel manually on pause
        // it's a fire-and-forget action
    }
}
_
1
Re'em

LifeCycleObserver はGoogleがリリースしたものの一部です Android Jetpack LifeCycle Architectureコンポーネントであり、LifeCycle対応の監視可能なコンポーネント、通常は LifeCycleOwner (アクティビティ/フラグメント)、ライフサイクルと対話するために events および states このコンポーネントに関連付けられています。そのため、フォアグラウンドおよびバックグラウンドのライフサイクルイベントを監視できます。

ここに、典型的な使用法のいくつかの便利なリンクがあります

0
Zain