これは私の理論です-アクティビティの作成時にバックグラウンドスレッドを作成し、アクティビティによって参照されるコールバックを使用して、アクティビティが閉じられた場合、コールバックのハードリファレンスのためにメモリに残りますか? では、アクティビティが閉じられたときにバックグラウンド操作が実行を停止していることを確認するにはどうすればよいですか?
3 に答える
その時点で、バックグラウンド タスクをActivity
実装して殺害してください。onStop()
アクティビティが終了すると、Android はすべてのビュー参照を null に設定し、アクティビティ参照を null に設定します。また、Android は、Activity によって開始されたスレッドを問題なく強制終了できると想定しています。したがって、スレッドは強制終了されますが、時間は定義されていません。あなたの状況では、すべての参照がnullに設定されるため、コールバックは問題になりません。コールバックを聞く人は誰もいないでしょう。
自分でスレッドを強制終了する最も簡単な方法は、スレッドのコード実行をループ内に保持することです。スレッドのすべてのループでチェックされる volatile ブール値パラメーターを使用できます。
while (!threadStop) {
// Do stuff
}
onDestroy() で、この変数を true にします
したいですonStop()
かonDestroy()
?
リスト項目のクリックやサブアクティビティの開始など、アクティビティから移動すると、アクティビティが完全に非表示になったときにonPause()
がトリガーされます。onStop()
メモリが問題である場合は、メモリの実装を検討するonDestroy()
か、バックグラウンド操作で Weak/SoftReference を使用してリークを防ぐ必要があります。