バックグラウンド
ランドスケープ モードをサポートすることで、アプリの改善に取り組んでいます。私がよく使うのはLoaders、より具体的にはAsyncTaskLoadersです。
ローダーを使用すると、 AsyncTaskとは対照的に、方向の変更によりアクティビティが再作成されている場合でも、バックグラウンド タスクを実行し続けることができます。
質問
ローダーのライフサイクルについてお聞きしたいです。
- 彼らはいつGC-edを取得しますか? それらを追跡する必要がありますか? 内部にビットマップがある場合は、できるだけ早く破棄する必要がありますか? アクティビティが実際に破棄された後にのみ GC されるのでしょうか (構成の変更によるものではありません)。
- 停止中の状態があることに気付きました。これで一時停止できますか?
- #2が当てはまる場合、それ自体のいくつかのポイントで一時停止できるローダーをどのように実装しますか?
- フラグメントもローダーを持つことができますか? 私が気づいたように、それは活動のためだけです。
- #4 が false の場合、コンテナ内のフラグメントを置き換えるナビゲーション ドロワーのデザイン パターンでローダーを使用する推奨される方法は何ですか?
- AsyncTaskLoader は AsyncTask (またはスレッド) のように中断できますか? そのコードと API を調べましたが、見つかりません。また、回避策を見つけようとしましたが、成功しませんでした。
- #6 が間違っている場合、代替手段はありますか? たとえば、ローダーが何かをロードする必要がないことがわかっている場合は、すぐに停止できます。私が考えることができる1つの方法は、停止するように指示するフラグ(おそらくAtomicBoolean)を設定し、時々この値をチェックすることです。問題は、それが使用する関数内でも追加する必要があることですが、より簡単な方法は「Thread.sleep(0)」などを呼び出すことです。
- ローダーのライフサイクルの説明はどこにありますか?
- AsyncTaskLoaders は同時に連携して動作しますか? それとも、単一のスレッドでのみ実行される AsyncTask のデフォルトの現在の動作に似ていますか?