2017-01-10 15 views
4

私は100sの断片で大きなプロジェクトを持っています。彼らはすべて私が描写しているパターンにかなり従っており、私の質問は続くでしょう。onDestroyのビューからView.OnClickListenerを解放する必要がありますか?

public class MyFragment extends Fragment implements View.OnClickListener { 

    public void onDestroy(...) { 
    } 

    public void onCreateView(...) { 
     ... 
     root.findViewById(R.id.some_button).setOnClickListener(this); 
     return root; 
    } 

    public void onClick(View v) { ... } 
} 

リスナーをonDestroyの部分から解放する必要がありますか?これはメモリリークですか、まったく問題が発生するのでしょうか?これらをきれいにするのは良い方法ですか?そして、可能であれば、理由の説明?

+1

現在実行中のヒットはありますか?リスナーがなぜ追加メモリに漏れてしまうのでしょうか? –

+0

いいえ。私は主に将来の問題やバックグラウンドの問題を心配しています。私は、これらのリスナーを解放することは良いアイデアや良い練習であると私に言っているパートナーを持っており、理由はありません。 –

+1

クリックリスナーの削除について一度も言及していません。アクティビティを指し示す「フラグメント相互作用リスナー」は、必ず削除する必要がありますが、アクティビティがonDestroyから切り離されているためです。 –

答えて

5

いいえ、onDestroyイベントでonClickListenerを解放する必要はありません。フラグメントがリスナーであるにもかかわらず、ガベージコレクタは、循環参照さえも解決できるほどスマートです。両方がガベージコレクションのために他の点では理解できれば、問題はありません。

+0

これをサポートするための参考資料または証拠がありますか?また、どのようにガベージコレクションの対象となるのか分かりますか? –

+0

循環参照の文について[this](http://stackoverflow.com/questions/1910194/how-does-java-garbage-collection-work-with-circular-references)を読むことができます。アンドロイド上でメモリプロファイラを使用して個人的な経験。 – NameSpace

+0

@JBlaz私は「Thinking in Java」という本をお勧めします。ガベージコレクションのプロセスは非常によく説明されています。 – YTerle

関連する問題