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