0

特定のプロセスで実行されているサービスと他のAndroidアプリケーションとの間でオブジェクトを共有するにはどうすればよいですか?Android:特定のプロセスとアクティビティのサービス間のオブジェクトの共有

私のマニフェストでは、process="com.test.myprocess"をサービス宣言に設定しました。

ユーザーがアプリにログインしたときに「セッション」オブジェクトを初期化します。次にAndroidサービスを開始し、セッションオブジェクトにAndroidアノテーションを注入します。しかし、私がサービスで私の注入セッションからsession.getUuid()を実行すると、私はいつも "null"を取得します。

私のアプリ(例えばUiThread)に対応するプロセスで同じことを行うと、値はnullではありません。 Serviceから、私は機能を使用することをお勧めしActivityにオブジェクトを送信するために

おかげ

+0

はい、ユーザーが最近のアンドロイドアプリからアプリをスワイプしたときに、Androidがサービスを停止しないようにしたい場合は – psv

+0

[Messengerを使用したバインドサービス](https://developer.android.com/)を作成します。あなたが質問がある場合私に教えてください –

+0

私はAndroidの注釈を使用していますが、このフレームワークでサービスをバインドする簡単な方法があるかどうかわかりません。 – psv

答えて

0

public void sendBroadcast(Intent intent); 

適切なIntentを作成し、あなたの変数や余分なオブジェクトを置きます。オブジェクトはSerialisableインターフェイスを実装する必要があります。 JSONにシリアル化して文字列を渡すことができない場合あなたがサービスをバインドしました

registerReceiver(receiver, new IntentFilter("UNIQUE_BROADCAST_ID")); 
+0

はい...これはうまくいくかもしれませんが、おそらく手動でAndroidのアドバイスとしてサービスをバインドします。 Android Annotationで単純な方法がないのは単なる奇妙なことです。 – psv

0

:あなたのActivity特定のコードでBroadcastReceiverを登録するには

Intent intent = new Intent(); 
intent.setAction("UNIQUE_BROADCAST_ID"); 
intent.putExtra("EXTRA_ID", ...); 
this.sendBroadcast(intent); 

:このような? AIDLについていくつか学ぶことができます。クラスオブジェクトはプロセスにのみ属しているため、Annotationを使用して別のプロセスでセッションオブジェクトを取得すると、結果はnullになります。

+0

私のアプリケーションが2つのプロセスを作成しても、クラスオブジェクトがプロセスにのみ属していると確信していますか?もしそうなら、私はprocess="com.test.myprocess"を設定すれば、AIDLアーキテクチャを使わなければならないのでしょうか? Android AnnotationでAIDLを使用するのは少し難しいようですが、私は在庫のアンドロイドAPIを使って作業しなければなりません。つまり、注入依存性がないことを意味します – psv

+0

はい、プロセスはdalvik仮想マシンで実行されています。 javaファイルの場合、dvmにはcalssオブジェクトが1つしかありません。他の人はブロードキャスト受信機を使用できると述べています。 – whis

関連する問題