1

アクティビティと、別のプロセスで実行されている生成されたリモート サービスの間で、適切なデータ共有戦略があるかどうか疑問に思っていました。これまでに3つの方法を試しましたが、どれもうまくいきませんでした。

使用するApplication

私が最初に考えたのは、Application2つの異なるプロセス間で共有されるのは、単一のアプリケーションからのものであるためです。

しかし、そうではありません。メインActivityが作成される前に、Application意志が作成されることに気づきました。リモート サービスを生成すると、別の新しいApplicationインスタンスも作成されます。

使用するPreferences

私の最初の考えは、これはファイルベースだということです。したがって、Preferencesthroughに値を書き込むたびにsharedPreferences.edit().putString(key, value).commit()、変更がファイルにコミットされます。別のプロセスが最新の変更を読み取ることができるはずです。

しかし、そうではありません。私の推測では、これは、私のサービスでは、Preferencesサービスの起動時にインスタンスを 1 回だけ取得するためPreferenceManager.getDefaultSharedPreferences(application)です。初回のみファイルから値を読み取ります。後続の呼び出しgetStringはメモリから読み取られます。

グローバル静的変数を使用する

ActivityとリモートServiceは 2 つの異なるプロセスにあるため、機能しません。それらは2つの異なるメモリ空間を持っています。

私が試すことができるより良い戦略はありますか?

4

1 に答える 1

0

他の 2 つのオプションのいずれかを使用することをお勧めします。

1: ブロードキャスト

一方の端で Context.sendBroadcast(Intent i) を使用してブロードキャストし、もう一方の端で Context.registerReceiver(BroadcastReceiver b) で定義された BroadcastReceiver をブロードキャストします。

インテントにはかなりの量のデータを格納できますが、インメモリ変数を直接使用する場合に比べてアクセスは非常に遅くなります。

2: サービスバインディング

AIDL を使用してリモート サービスへのインターフェイスを定義すると、プロセス境界を越えてリモート サービスに接続できます。他のオプションよりも少し複雑ですが、利用可能な最速のオプションでもあります。詳細はこちら: http://developer.android.com/guide/components/bound-services.html

于 2013-11-25T17:12:48.530 に答える