4

Android のドキュメントには次のように記載されています ( http://developer.android.com/training/basics/activity-lifecycle/stopping.html内):

極端な場合、システムはアクティビティの最後の onDestroy() コールバックを呼び出さずにアプリ プロセスを強制終了する可能性があるため、onStop() を使用してメモリ リークの可能性があるリソースを解放することが重要です。

それは間違っているように聞こえます。killされたプロセスはどのようにしてメモリリークを起こすのでしょうか?

4

1 に答える 1

8

onStart() メソッドでサービスを開始し、ユーザーがアクティビティから出たときにそのサービスを停止するとします。

サービスを停止するコードを onDestroy() に配置すると、そのコードが呼び出されない可能性があり、Android がサービスを強制終了することを決定するまでそのサービスを実行したままにすることができます (これはしばらくの間発生しない可能性があります)。その実行中のサービスは、アプリケーションの外部でメモリ/リソースをリークする例です。

このようなクリーンアップ コードは、確実に呼び出されるメソッドに配置する必要があります。

onPause() が呼び出された後、プロセスは kill 可能であることに注意してください。したがって、onPause() は、絶対に実行しなければならないクリーンアップを実際に実行したい場所です。

(アクティビティのライフサイクルの詳細については、 https://developer.android.com/guide/components/activities.htmlの表 1 を参照してください)

Bluetooth 検出または位置レポート (GPS またはネットワークベース) がオンになっているが、すぐにオフにならない - バッテリーの寿命に非常に悪い.

于 2012-12-24T06:15:12.447 に答える