public class BindService extends Service {
private int mCount;
private boolean mQuit;
// 定义onBinder方法所返回的对象
private final MyBinder mBinder = new MyBinder();
// 通过继承Binder来实现IBinder类
public class MyBinder extends Binder
{
public int getCount() {
// 获取Service的运行状态:count
return mCount;
}
}
// 必须实现的方法,绑定该Service时回调该方法
@Override
public IBinder onBind(Intent intent) {
System.out.println("Service is Binded");
// 返回IBinder对象
return mBinder;
}
// Service被创建时回调该方法。
@Override
public void onCreate() {
super.onCreate();
System.out.println("Service is Created");
// 启动一条线程、动态地修改count状态值
new Thread() {
@Override
public void run() {
while (!mQuit) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
mCount++;
}
}
}.start();
}
// Service被断开连接时回调该方法
@Override
public boolean onUnbind(Intent intent) {
System.out.println("Service is Unbinded");
return true;
}
// Service被关闭之前回调该方法。
@Override
public void onDestroy() {
super.onDestroy();
this.mQuit = true;
System.out.println("Service is Destroyed");
}
}
<!-- 配置该Service组件 -->
<service android:name=".BindService" >
<intent-filter>
<action android:name="org.crazyit.service.BIND_SERVICE" />
</intent-filter>
</service>
public class BindServiceTest extends Activity {
Button bind, unbind, getServiceStatus;
// 保持所启动的Service的IBinder对象
BindService.MyBinder mBinder;
// 定义一个ServiceConnection对象
private final ServiceConnection mConnection = new ServiceConnection() {
@Override
// 当该Activity与Service连接成功时回调该方法
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("--Service Connected--");
// 获取Service的onBind方法所返回的MyBinder对象
mBinder = (BindService.MyBinder) service;
}
@Override
// 当该Activity与Service断开连接时回调该方法
public void onServiceDisconnected(ComponentName name) {
System.out.println("--Service Disconnected--");
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bind = (Button) findViewById(R.id.bind);
unbind = (Button) findViewById(R.id.unbind);
getServiceStatus = (Button) findViewById(R.id.getServiceStatus);
// 创建启动Service的Intent
final Intent intent = new Intent();
intent.setAction("org.crazyit.service.BIND_SERVICE");
bind.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View source) {
// 绑定指定Serivce
bindService(intent, mConnection, Service.BIND_AUTO_CREATE);
}
});
unbind.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View source) {
// 解除绑定Serivce
unbindService(mConnection);
}
});
getServiceStatus.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View source) {
// 获取、并显示Service的count值
Toast.makeText(BindServiceTest.this, "Serivce的count值为:" + mBinder.getCount(), Toast.LENGTH_SHORT).show();
}
});
}
}
对于servicer的onBind()方法所返回的IBinder对象来说,它可被当成该Service组件所返回的回调对象,service允许客户端通过该IBinder对象来访问Service内部的数据,这样即可实现客户端与Service之间的通信。