私のアプリケーションには、同じプロセスで実行されているアクティビティとサービスがあります。ユーザーが [STOP] ボタンをクリックしてアクティビティを終了すると、そのアクティビティによってサービスが終了します。
Androidのドキュメントから、システムがプロセスを強制終了してリソースを再利用できることを理解しています:
「アクティビティが停止すると、システム メモリを回復する必要がある場合、システムはインスタンスを破棄する可能性があります。極端な場合、システムはアクティビティの最後の onDestroy() コールバックを呼び出さずにアプリ プロセスを単純に強制終了する可能性があります。」
質問 1: サービスではなく、アクティビティが強制終了される可能性はありますか? 私は自分のサービスが存続することを望みます。
答えが「はい」の場合
質問 2: アクティビティが強制終了されたことをサービスに通知できるメカニズムはありますか?
IBinder.linkToDeathには必要な機能がありますが、アクティビティではなくプロセスに適用されるようです。
アクティビティがセマフォの所有権を取得し、サービスがスレッドを使用してそれを待機するような間接的な方法を考えました。次に、アクティビティが強制終了されると、セマフォが解放され、サービスがセマフォを取得して通知を提供します。しかし、私が使用できるAndroid中心の手法がないかどうか疑問に思っていました.
【編集開始】
あなたが提供してくれた非常に有益なコメントを読んだ後、私が提示しているシナリオを明確にしたいと思います.
アクティビティとサービスの 2 つのコンポーネントを開始しました。アプリケーションは、アクティビティが停止して破棄された後もサービスを実行し続けることができるように構成されています。ユーザーはアクティビティを複数回再開/開始でき、サービスの同じインスタンスを使用します。
通常、アクティビティは onDestroy() 中に破棄されたことをサービスに通知します。ただし、 onDestroy() は呼び出されない場合があります。
onDestroy() メソッドを呼び出さずにアクティビティが強制終了されたことをサービスに通知するために使用できる Android 固有のメカニズムがあるかどうかを知りたいです。
[編集終了]
ご協力いただきありがとうございます。
意思