1

プロセス全体で特定の情報 (状態変数 - ブール値としましょう) を提供したいと考えています。この変数の状態はサービスによって維持され、他のアプリはそれを読み取ることしかできません (変更することはできません)。

私の最初の考えは SharedPreferences でしたが、SharedPreferences の使用は複数のプロセスでサポートされていないというメモがドキュメントに記載されています。残りは、サービス メッセージング、AIDL、インテント、および ContentProvider です。

サービス メッセージングまたは AIDL は、(インテントと同様に) 非同期部分が常にあるため、問題外です。私は ContentProvider についても考えましたが、これだけのために少し誇張/肥大化しているようです。外部ストレージに書き込むと、他のプロセスによるデータの変更が可能になります。

それで、私は何かを見逃していますか、それとも私が達成しようとしていることは本当に不可能ですか? (またはその点で推奨)

前もって感謝します。

4

1 に答える 1

2

サービス メッセージングまたは AIDL は、(インテントと同様に) 非同期部分が常にあるため、問題外です。

AIDL ベースのサービスへのバインドは非同期ですが、事前に一度行われます。AIDL 定義のメソッドの呼び出しは同期的です。

私は ContentProvider についても考えましたが、これだけのために少し誇張/肥大化しているようです。

あなたの選択のほとんどは、同様に「これだけのために誇張/肥大化」します。

何か足りない?

Intents特に値が頻繁に変更されない場合は、ブロードキャストを使用して変更を値にプッシュできます。ここでの課題は、初期値のブートストラップです (たとえば、アプリ B がインストールされており、アプリ A からの値が必要ですが、値が変更され、アプリ A がブロードキャストを送信するまで待機する必要があります)。ただし、読み取りごとに IPC を実行すると、必要以上のオーバーヘッドが追加される可能性があるため、値を頻繁に読み取る場合は検討する価値があります。

また、そもそもこの依存関係を持つことが良い考えであるかどうかを再考することをお勧めします。前の段落の命名法を使用すると、アプリ A によって維持される何らかの値が必要な場合、アプリ B はおそらくアプリ A なしでは存在できません。ユーザーはいつでもアプリ A をアンインストールできるため、これは問題を引き起こす可能性があります。また、このフラグがある種の制御メカニズムとして意図されている場合 (たとえば、他のアプリが Y を実行しているときに X を実行しないでください)、特に両方のプロセスが実際に同時に実行される可能性があるマルチコア デバイスでは問題が発生します。 .

于 2012-11-09T16:15:16.457 に答える