2017-12-05 15 views
4

私は、LifecycleObserverインターフェイスを実装するAndroid Javaクラスを構築しています。Android Lifecycleからオブザーバーとして自分自身を削除することは必須ですか?

これはコンストラクタです:

@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) 
public void destroyListener() { 
    if (this.mActivity.get() != null) { 
     this.mActivity.get().getLifecycle().removeObserver(this); 
    } 
} 

それとも、私は永遠に観察することができます:

public MyObserver(AppCompatActivity activity) { 
    this.mActivity = new WeakReference<AppCompatActivity>(activity); 
    activity.getLifecycle().addObserver(this); 
} 

のようなものを使用して、これまでremoveObserverを呼び出すことが必要ですか?

答えて

0

TL; DR:Nope。

このlink hereによると、ユーザーがandroid-lifecycles Githubレポに関する質問をしました。この質問へのグーグルの開発者の答えは:はい、それは新しいライフサイクルを意識した構成部品の全体のポイント

だ、何 はオブザーバーを削除/解除する必要はありません。

0

TL; DR:終了したらオブザーバーを明示的に削除する方がよいでしょう。たとえば、LiveDataのように自動的にこれを処理するものを使用する方がよいでしょう。

Lifecycleは、abstractクラスです。だから、技術的には、実装が何であるか、そしてゲームのルールが何であるか分かりません。

コンクリートLifecycleLifecycleRegistryです。オブザーバーに対する強い言及があります。だから今アクティビティが破棄されたときなど、時機を得てガベージコレクションされたLifecycleRegistryがあなたに役立っています。 FragmentActivityの場合はそうです。したがって実際には、現在のすべてのものについて、オブザーバーを登録解除せずに立ち去ることができます。もしあれば、悪影響はほとんどありません。

しかし、それはLifecycle契約の一部ではありません。間違いなく、Lifecycle(またはLifecycleRegistryを使用するもの)の適切な実装は、は登録解除に失敗したケースをきれいに処理する必要があります...しかし、私はそれを危険にさらしません。

関連する問題