質問: Androidアプリの動きについて調べていますが、よくわからないので質問します。 プロセス、コンポーネント、スレッド、タスク等についてです。 上記でプロセスやコンポーネント等、各々については何となくわかったのですが、 全体的な関係がイマイチつかめません。自分の認識が正しいのかわからないので、 以下の認識が誤っているかを教えていただけませんでしょうか。 ・ActivityとServiceを持つアプリでマニフェストでのプロセスの設定は特になしとします ・ServiceはstartServiceで実行し、onStartCommandの返り値はSTART_NOT_STICKYとします 1 メモリ確保のため、OSは終了可能なプロセスを終了する場合がある 2 プロセスが終了された場合、そのプロセス内で動作しているコンポーネントも終了する 3 メモリ確保のため、プロセス内の終了可能なコンポーネントのみを終了する場合もある 4 アプリのコンポーネントが終了しても、即座にプロセスが終了するわけではない (終了する場合もある?) 5 プロセスやコンポーネントが終了しても、非同期スレッドの処理は即座に終了しない(?) 6 バックキー、タスク画面(□ボタンで表示できる画面)からアプリを終了した場合や、 設定アプリなどからアプリを終了した場合は、アプリのプロセスを終了している 7 savedInstanceStateは、Activityの設定変更(画面回転等)や、メモリ確保のためにActivityが 終了した場合には中身があり、6のような手順でActivityが終了した場合はnullである どうかよろしくお願いいたします。
回答: 正直うろ覚えですが、以下のような感じだったと思います。 1. Yes.(Linuxのプロセスキラー。各Androidアプリに割り当てられたプロセスは重要度別にランク分けされており、重要度が最も低いプロセスから順にKillされる。具体的にはバックグラウンドで動作するものは重要度が低く、ユーザーが操作中のプロセスは最も重要となる) 2. Yes.(プロセスがKillされた場合、そのプロセスに割り当てられていたメモリ領域は開放待ちになる) 3. Yes.(例えば、バックグラウンドのServiceのみがKillされる等) 4. No.(この後で実行するものが何も無いことが分かっている場合は終了する可能性がある) 5. No.(コンポーネントが終了しても非同期スレッドの処理は即座に終了しない。ただし、プロセスごとKillされた場合は即座に終了する) 6. No.(バックキーでは終了していない場合がある。それ以外のケースではプロセスキラーが走っており、終了している) 7. どちらともいえない.(そもそも呼ばれない時もある(Androidのバージョンや機種、終了時の処理の重さにもよる)。正直なところ、onPauseで処理するのが確実) 追記。7番に関しては間違いがあったため回答を修正しています。