1、把service在mainfest中注册,如:<service android:name="com.example.android.download.DownLoadService"/>
2、一个类继承Service,此类中一个内部类继承Binder,service类实现复写onBind方法,返回值为继承Binder的对象,如下:
public class DownLoadService extends Service {
private static final String TAG = "DownLoadService";
private SimpleBinder sBinder = new SimpleBinder();
@Override
public IBinder onBind(Intent arg0) {
Log.i(TAG, " onBind");
return sBinder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i(TAG, " onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
public class SimpleBinder extends Binder {
/**
* 测试activity和service是否绑定成功
*/
public int add(int a, int b) {
return a + b;
}
}
}
private boolean isBindered; // 是否已经和service绑定
private MyServiceConnection myServiceConnection = null;
private DownLoadService.SimpleBinder sBinder;
/**
* 启动service
*/
private void startService() {
if (isBindered) {
Log.i(TAG, " startService, is bindered");
} else {
Log.i(TAG, " startService, to bind service");
Intent intent = new Intent();
intent.setClass(DownloadActivity.this, DownLoadService.class);
myServiceConnection = new MyServiceConnection();
this.startService(intent); // 用startService方法启动service,不需要时可不调用
bindService(intent, myServiceConnection, BIND_AUTO_CREATE);
}
}
内部类:
class MyServiceConnection implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i(TAG, " in MyServiceConnection, onServiceConnected");
sBinder = (DownLoadService.SimpleBinder) service;
isBindered = true;
int addRerue = sBinder.add(1, 5);
Log.i(TAG, " addRerue is: " + addRerue);
}
@Override
public void onServiceDisconnected(ComponentName name) {
Log.i(TAG, " in MyServiceConnection, onServiceDisconnected");
}
}
4、以上这样就最简单的实现了activity和service绑定
备注:解除绑定可以如下:
if (isBindered) {
unbindService(myServiceConnection);
}
只要打印出了如下log,就说明绑定成功:
addRerue is: 6
可查看源代码,路径:http://download.youkuaiyun.com/detail/w250shini11/8266007