プロセスとアプリケーションとスレッドの関係
プロセスとアプリケーションとスレッドについての理解が非常にあいまいなため、整理してみます。
プロセスとアプリケーションのライフサイクルの関係
アプリケーション内のサービスやアクティビティが全部終了していても、プロセスは停止しない。
例えばアクティビティ1枚のアプリケーションを起動して、onDestroyさせてもプロセスは生きている。(DDMSのDevicesビューや、設定>アプリケーション>実行中 にアプリケーションが表示されている)
Androidがこうする理由は、プロセスの生成コストによるバッテリー消費を避けるためらしい。
Androidの各アプリケーションは,システム上の1プロセスとして起動される。通常のLinuxディストリビューションであれば,ソフトウエアの終了はプロセスの停止を意味する。しかし,Androidの場合はユーザーがアプリケーションを終了しても,プロセス自体はすぐには停止しない。
その理由は,一般的なPCとは違い,携帯端末では消費電力が問題になるからだ。
プロセスの生成は一般的な処理に比べて,CPUをはじめとするコンピュータ・リソースの消費量が非常に大きい。ユーザーがアプリケーションを切り替えるたびに,プロセスの終了と生成を繰り返していては,バッテリの持続時間が短くなってしまう。
そのため,使われなくなったアプリケーションのプロセスも,すぐに終了せず,待機状態にしておく。もし,待機しているアプリケーションの起動が要求されたら,待機中のプロセスを利用し,プロセス生成のコストを低減するのである。Androidの仕組みを知る(1) - Android徹底解説---内部構造,移植,開発:ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20091126/341182/?ST=android-dev&P=2
アプリケーションとスレッドの関係
アプリケーションを終了させてもプロセスが生きているということは、アプリケーションからスレッドを起動して、アプリケーションを終了させてもスレッドは終了しないということ。
例えばボタンを押すと別スレッドで5秒後にログを表示させる場合、5秒の間にアプリケーションを終了させてもスレッドに影響はない。(※ただしスレッドの参照に到達できなくなるとgc対象になってしまう?)
影響があるのは、プロセスを強制終了させた場合。