ActivityとService通信の4つの方式
4360 ワード
1、Binder
2、Intent
3、インターフェイス
サービスでインタフェースとインタフェース変数を定義し、データを転送する必要がある場所でインタフェースメソッドを呼び出してデータ転送を行い、Activityでインタフェースを実装してインタフェースメソッドを書き換えることで、サービスで転送されたデータを取得できます.
4、ブロードキャスト受信
この方式は比較的簡単で、サービスでIntentを利用してブロードキャストを送信し、Activityに対応するブロードキャスト受信を登録することで、Intentから伝達されたデータを取得することができます.
//activity
private MyService.MyBinder myBinder = null;
private ServiceConnection serviceConnection = newServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myBinder = (MyService.MyBinder)service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
// Service Binder Service ,Activity :
if(myBinder != null){
myBinder.setData("dataValue");
}
//service :
public class MyBinder extends Binder {
public MyService getService(){
return MyService.this;
}
public void setData(String dataValue){
data = dataValue;
}
public String getData(){
return data;
}
//service onBind :
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new MyBinder();
}
2、Intent
//activity Intent service
Intent intent = new Intent(TestActivity.this, MyService.class);
intent.putExtra("dataKey","dataValue");
startService(intent);
// service onStartCommand Intent
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
String dataVaule = intent.getStringExtra("dataKey");
return super.onStartCommand(intent, flags, startId);
}
3、インターフェイス
サービスでインタフェースとインタフェース変数を定義し、データを転送する必要がある場所でインタフェースメソッドを呼び出してデータ転送を行い、Activityでインタフェースを実装してインタフェースメソッドを書き換えることで、サービスで転送されたデータを取得できます.
Service :
//
if (serviceCallBack != null) {
// ,
serviceCallBack.getServiceData(data);
}
//
public interface ServiceCallBack {
void getServiceData(String data);
}
//activity :implements ServiceCallBack
@Override
public void getServiceData(String data) {
// data Service
}
4、ブロードキャスト受信
この方式は比較的簡単で、サービスでIntentを利用してブロードキャストを送信し、Activityに対応するブロードキャスト受信を登録することで、Intentから伝達されたデータを取得することができます.