1

マニフェストに同じ SharedUserId 値を持つ 2 つのアプリ、App1 と App2 があります。App1 には、別のプロセスで実行するように指定された Service コンポーネントがあります (マニフェスト android:process=":remote" 内)。このサービスの主な目的は、App2 をチェックすることです。App2 が閉じたときに、サービスに何らかのクリーンアップを実行してもらいたいと考えています。

App2 を強制終了すると、App1 のサービスが強制終了され、その onDestroy() メソッドは呼び出されません。App2 を強制停止したときに、App1 のサービスが強制終了されていない (または少なくとも onDestroy の呼び出しで終了していない) ことを確認するにはどうすればよいですか?

編集:それが違いを生む場合、Galaxy NexusのAndroid 4.0.1

4

1 に答える 1

0

はい、可能です。sharedUserId を使用している場合、これら 2 つのアプリケーションが同じスレッドで実行されると想像してください。つまり、これらのアプリケーションのライフ サイクルが同じであることを意味します。これは、基本的に、これらのアプリケーションのいずれかで「強制終了」を使用してスレッドを終了することを意味します。

このスレッドのすべてが殺されることを意味します。コンテンツ プロバイダーを使用するのではなく、アプリケーション間で sharedUserID と sharedProcess を使用することのマイナス点の 1 つ。

アプリを強制終了する場合の回避策はないと思います。たぶん、「通常の」方法で終了し、OSに強制終了させる必要があります。

あなたのコメントから更新:

一般的に、私はこれらの種類のものに介入する傾向はありません。私が慣れているように、ユーザーは手動でアプリを閉じたいと思うかもしれません。サービスやアプリを何度も実行しているとイライラします。

それが私の見解です。私の信念にもかかわらず、未処理の例外が発生したときに強制終了した後にアプリケーションを手動で再起動するトリックがあり、ユーザーによる強制終了の反応は同じであると思います。私が推測するサービスに保留中のインテントを追加できます: Android: How to auto-restart application after it has been "force closed"?

于 2012-07-04T19:26:21.570 に答える