プロセスを強制的にKILL(STOP)してAndroidのライフサイクルを検証
どうも、伊藤です。
アプリを起動中にホームボタンを押下して閉じた場合、再度アプリを起動すると同じ画面が表示されたりされなかったり、または強制終了したり、、、という事象に遭遇した事はないですか。
これは別アプリがメモリを利用しすぎてメモリが逼迫した際に、OS側が強制的に該当アプリのプロセスをKillしたケースに発生します。
OS側でどうしてもメモリ確保が必要になると必須ではなアプリをKillします。ただ、個人的には必須だと思えるようなプロセスもKillされているように感じます。(LocationManagerServiceとか)
そして、強制的にプロセスをKillされた場合はActivityのonStopやonDestoryが呼び出されない事があり、ここで挙動がおかしくなる事が多いようです。
公式文書
http://developer.android.com/intl/ja/guide/components/activities.html
if the system must recover memory in an emergency, then onStop() and onDestroy() might not be called. Therefore, you should use onPause() to write crucial persistent data (such as user edits) to storage. However, you should be selective about what information must be retained during onPause(), because any blocking procedures in this method block the transition to the next activity and slow the user experience.
こういったケースを回避してどういった状況でもホームボタン押下前の状態にするには、任意にデータを保存する必要があります。
オーソドックスなやり方としては、保存で「onSaveInstanceState(Bundle)」を利用し、読み出しに「onRestoreInstanceState(Bundle)」を利用します。
“プロセスを強制的にKILL(STOP)してAndroidのライフサイクルを検証” の続きを読む