在上一篇博客中http://blog.csdn.net/redoq/article/details/52142868,我们对Service进行了粗略的讲解,这一篇博客我将介绍Service的通信机制,不足之处望指正。
由于Service的启动分为两种,所以我把Service的通信分为两种介绍
一:对于通过startService启动的服务
我们可以通过下面的代码将数据发送到Service中
启动服务的Activity中的代码
Intent i = new Intent(this,MyService.class);
i.putExtra("data","send data");
...
startService(i);
MyService中的代码,由于使用的是startService启动服务,所以这里用onStartCommand来接收数据
private String data = "";
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
data = intent.getStringExtra("data"); //通过onStartCommand中的intent参数获取数据
System.out.println("接收到的数据为:" + data);
return super.onStartCommand(intent, flags, startId);
}
输出结果 接收到的数据为:send data
通过startService传递数据虽然简单方便,但是不能将MyService中的数据返回到调用它的Activity,除非使用广播,我将在后面对广播进行讲解。
=============================================================================
二、通过bindService绑定服务传递数据
1、首先,我们重写MyService中的onBind()并新建一个类继承Binder
public class MyService extends Service {
private String data = "";
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
return new MyBinder(); //将MyBinder对象返回给启动MyService的Activity
}
public class MyBinder extends Binder {
//Binder类实现了IBinder接口
public void setData(String data) {
MyService.this.data = data; //修改data的值
}
}
}
2、然后我们使用bindService绑定服务并重写onServiceConnected()和onServiceDisconnected()
MainActivity代码
private MyService.MyBinder binder = null; //新建一个