1. OS がアプリケーションを強制終了しても、サービスを強制終了しない状況はありますか?
tl;dr:はい、可能です。ただし、Service
独自のプロセスで開始する必要があります。
説明:
Android OS は、メモリが不足しているときに、またはなどの個々のコンポーネントではなく、プロセスを強制終了することを理解することが重要です(この回答を参照してください)。Activities
Services
上記のステートメントを考えると、 a が別個のプロセスに含まれている場合にのみ、 aService
が から独立して存在できることは明らかです。Application
そうしないと、プロセスが破棄されるときに一緒に破棄されます。
ここで、Service
とApplication
が別々のプロセスに存在する場合を考えてみましょう。Android では、メモリ不足の状況では、優先度の低いプロセスから高いプロセスへとプロセスが破棄されます。優先順位は、Empty < Background < Service < Visible < Foreground (こちらを参照) です。したがって、アプリケーションがバックグラウンドにある場合など、生きている間に意志が破壊される可能性があり、アプリケーションが生きている間 (アプリケーションがフォアグラウンドにある場合) に意志が破壊される可能性もありApplication
ます。Service
Service
android:process
コンポーネントのマニフェスト タグで属性を定義することにより、アプリケーションの任意のコンポーネント (Activity、Service、ContentProvider など) を独自のプロセスで実行するように宣言できます。
Processesの公式ドキュメントから:
デフォルトでは、同じアプリケーションのすべてのコンポーネントが同じプロセスで実行され、ほとんどのアプリケーションはこれを変更しないでください。ただし、[...] コンポーネント要素の各タイプ ( Activity
、Service
、Receiver
、および) のマニフェスト エントリは、そのコンポーネントを実行するプロセスを指定できる属性をProvider
サポートしています。android:process
この属性を設定して、各コンポーネントが独自のプロセスで実行されるようにするか、一部のコンポーネントがプロセスを共有し、他のコンポーネントが共有しないようにすることができます。[...]このApplication
要素は、すべてのコンポーネントに適用されるデフォルト値を設定するために、android:process 属性もサポートしています。
2. システムによってサービスが再起動されると、アプリケーションも再起動されますか?
これは、質問 1 の回答に関連しています。
Service
が と同じプロセスに存在する場合、Application
それらは両方とも破棄され、一緒に再起動されます。
Service
が のように別のプロセスに存在する場合、Application
それらは完全に別のプロセスであるため、Android OS が適切と見なすように、互いに独立して破棄および再起動されます。