サービス通信に関して、 EventBus ライブラリをアクティビティとして使用できますか?
私は次のように私のアプリでこれを試しました:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
setContentView(R.layout.activity_music_player);
Intent serviceIntent=new Intent(MusicPlayerActivityTest.this,MusicPlayerServiceTest.class);
startService(serviceIntent);
EventBus.getDefault().post(new SetSongList(songArraList, 0));
}
@Override
protected void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
そして私のサービスでonEvent
が呼ばれました。
エミッタではなく、サブスクライバを登録する必要があります。
したがって、イベントを取得する予定がある場合は、アプリから登録/登録解除を削除してください。その場合は、onEvent
(AnyEventイベント)メソッドをApplicationクラスに追加するだけです。
次に、onStart()
でサービスにEventBusを登録し、onStop()
で登録を解除します。
それならもっとうまくいくはずです。
アプリケーション内
public class MyApp extend Application {
@Override
public void onCreate() {
super.onCreate();
...
EventBus.getDefault().post(new SetSongList(songArraList, 0));
}
}
またはアクティビティ内
public class MyActivity extend Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
EventBus.getDefault().post(new SetSongList(songArraList, 0));
}
}
およびサービス内
public class MyService extends Service {
...
@Override
public void onCreate() {
super.onCreate();
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
EventBus.getDefault().unregister(this);
super.onDestroy();
}
public void onEvent(SetSongList event){
// do something with event
}
...
}
私の場合、zyamysによるコメントが役に立ちました。また、Anthonyでの回答は、コードの誤りのために正しいです。
別のプロセスを使用する場合、答えは[〜#〜] no [〜#〜]です。別のプロセスを使用する場合は、別の仮想マシン(Davlikなど)で実行されることを意味します。すべての静的フィールドは異なります...!例(AndroidManifest.xml):
<service Android:name=".GPSTracker" Android:process=":my_gps_tracker" />
同じプロセスでサービスを実行すると、答えは[〜#〜] yes [〜#〜]になります。例(AndroidManifest.xml):
<service Android:name=".GPSTracker"/>
最初のケースでは、インテントを送信/受信ブロードキャスト機能と組み合わせて使用して、サービスとアクティビティの間でデータを送信することをお勧めします。