2016-09-27 49 views
3

を考慮してくださいthisアンドロイドチュートリアルの例、ローダーの断片化 - 断片の漏れはありますか?

getLoaderManager()。initLoader(0、null、this);

は、私の知る限り、所与の断片のライフサイクルは、ActivityしたがってLoaderManagerライフサイクルに等しくないgaruanteeがない、ローダCursorLoaderListFragment.thisインスタンスを与え、onActivityCreatedと呼ばれます。したがって、Activityがまだ生きている間にフラグメントが削除されても、メモリリークは発生しませんか?

「はい」の場合、この例はどのように修正する必要がありますか?

+0

しかし、フラグメントが破壊されている間にアクティビティがまだアクティブであれば、AFAIKは 'onActivityCreated'で初期化されているため、ローダを破壊する必要があります。 –

答えて

2

ローダーは、バインドされたフラグメントまたはアクティビティが破棄されたときに破棄され、クリーンアップされます。つまり、FragmentインスタンスをinitLoader()に渡すと、Fragmentインスタンスが破棄されたときにローダーが破棄されます。

参考:

https://medium.com/google-developers/making-loading-data-on-android-lifecycle-aware-897e12760832#.ai7whgsv4

ローダーは永遠に周りに滞在していません。要求されたアクティビティーまたはフラグメントが永久に破棄されると、それらは自動的に でクリーンアップされます。 これは、余計な不必要な負荷がないことを意味します。