1

私の Android アプリケーションでは、ワーカーとしてスレッドを生成するフォアグラウンド サービスを使用しています。ときどき、アプリケーションが強制終了されるのを観察しましたが、スレッドはまだ使用できない値の一部を参照しようとしています。

アンドロイドは、サービスを実行したままアプリケーションを強制終了することを決定できますか?

サービスの onDestroy() メソッドでスレッドを停止しているため、Android がいつアプリケーションを強制終了したかを知りたいのですが、それは Service:onDestroy() を呼び出すでしょうか。

4

1 に答える 1

1

Android のすべてのアプリケーションは、Linux プロセスと同様に個別のプロセスとして実行されます。そのため、サービスが別のプロセスで実行されている場合、Android はある時点でプロセスをシャットダウンすることを決定する可能性があります。これは、メモリが少なくなり、ユーザーにより迅速にサービスを提供している他のプロセスが必要とする場合です。その結果、強制終了されたプロセスで実行されているアプリケーション コンポーネントは破棄されます。それらのコンポーネントに再び作業が必要になると、それらのコンポーネントのプロセスが再び開始されます。

どのプロセスを強制終了するかを決定するとき、Android システムはユーザーにとっての相対的な重要性を考慮します。たとえば、表示されているアクティビティをホストしているプロセスと比較して、画面に表示されなくなったアクティビティをホストしているプロセスをより簡単にシャットダウンできます。したがって、プロセスを終了するかどうかの決定は、そのプロセスで実行されているコンポーネントの状態によって異なります。終了するプロセスを決定するために使用されるルールについては、以下で説明します。

また、マニフェストの android:process 属性を使用して、サービスをアプリケーションと同じプロセスで実行できるか、別のプロセスで実行できるかを制御できます。

詳細については、以下のリンクでプロセスとスレッドについて読むことができます。

http://developer.android.com/guide/components/processes-and-threads.html

于 2013-03-25T14:41:39.630 に答える