2012-01-14 8 views

答えて

1

、それはSQLiteCursorLoaderに未処理Cursorclose()を呼び出しLoader実装にonReset()を呼ぶであろう、それが作成されたすべてのLoaderインスタンス上reset()を呼び出す必要があります。

これは、アクティビティが破棄されたときに発生することに注意してください。アクティビティが一時停止されたときにCursorを非アクティブにするという管理されたCursorコンセプトのLoaderに相当するようではありません。これはひどいヒープ管理機能だったので、残念です。それを最もうまくサポートする方法を考えます。

何かが流出しているという証拠が見つかった場合は、エラーの再現方法の詳細をfile an issue in the LoaderEx projectにしてください。

+0

+1ですが、私が正しく理解していれば、 'Loader 'の主張されている利点の1つは、' Activity'が破壊された後、例えば設定変更などのデータ(この場合は 'Cursor')が保持されることです。これは、 'LoaderManager'の寿命が' Activity'のものと切り離されているためです(私が間違っている場合は、私に修正してください)。しかし、これは 'onDestroy()'のすべてを閉じるともう終わりません。普通の 'AsyncTask'を使わないのはなぜですか?作成されたすべてのLoaderをどのように追跡することができますか? 'SQLiteOpenHelper'を閉じるのはどうですか?それは重要でもあります。 – Raffaele

+0

@Raffaele: 'FragmentActivity'(およびAPIレベル11+のベースライン' Activity')は、設定の変更を適切に処理するための賢い人を持っています。この答えで、私が「破壊された」と書いたとき、私は実際には「構成の変更に起因するものではなく、最終的に破壊された」ことを意味しました。私は混乱のためにお詫び申し上げます。 – CommonsWare

+0

そして、この*本当の破壊*に関連したコールバックは何ですか?ローダーを閉じるために必要です。これが起こったときに、 'Loader'が実行されていないことを保証する必要もあります。さらに、 'LoaderManager' APIは初期化された' Loader'をリストしていないので、手動で追跡するか、すべての可能なローダーをinitして閉じる必要がありますが、このアプローチは* fixed *ローダーをサポートすることはできません。* – Raffaele

関連する問題