私は、メモリリークを避けるために、アクティビティや主にフラグメント(継承を使用)で使用される次のメソッドを記述しました。その方法は、私は決して直接getActivity()の代わりに弱い参照(Androidはメモリリークを避ける)?
//this or getActivity()
メソッドを呼び出すことによってアクティビティを参照することが可能になっている。
private WeakReference<BaseActivity> activityWeakReference = null;
public BaseActivity getActivityFromWeakReference(){
activityWeakReference = activityWeakReference == null ?
new WeakReference<BaseActivity>((BaseActivity)getActivity()) :
activityWeakReference;
return activityWeakReference.get();
}
は、メモリリークの脅威に応じて代わりに安全なgetActivity()
この方法getActivityFromWeakReference()
を呼び出していますか?
安全でない場合は、activityWeakReference
を返信し、その代わりにget()
メソッドを呼び出して安全にしてください。
私はこれを複数のフラグメントで使用していますが、これまでのところ問題はありませんでした。私はこの(here)を読んでいるので、私は質問をする:
限りヘルパーの寿命が
Activity
の寿命の範囲内であるとして、その後、WeakReference
を使用する必要はありません。ヘルパー がActivity
よりも長く存続できる場合は、が破壊されたときにActivity
をオブジェクトグラフに保持しないように、WeakReference
を使用する必要があります。
これまでのところ、参照された要素がアクティビティよりも古くなったケースはありませんでした。もしあなたがエラーを見つけたら、あるいは可能な人がコメントにそれを書いてください。
'activityWeakReference'がnullではなく、' activityWeakReference.get() 'がnullの場合、メソッドはnullを返すことに注意してください。 –
@Mateus Gondim、入力いただきありがとうございます、私はすでにそれを使用する前にnullをチェックします。 –