1.创建一个MyBinder继承自Binder,实现相应回调功能。
public class MyBinder extends Binder {
private static final String TAG = "MyBinder";
private MyService mService;
private OnTestListener mListener;
public MyBinder(MyService service) {
this.mService = service;
}
public void setMethod(String str) {
// Activity通过Binder来调用Service的方法将消息传给Service
mService.setMethod(str);
}
public void setMethodBack() {
// 回调向Activity发送消息
mListener.onTest("测试成功");
}
// MyBinder 里面提供一个注册回调的方法
public void setOnTestListener(OnTestListener listener) {
this.mListener = listener;
}
//自定义一个回调接口
public interface OnTestListener {
void onTest(String str);
}
}
2.新建一个继承自Service的类MyService,然后在AndroidManifest.xml里注册这个Service,在MyService里实例化一个MyBinder对象mBinder,并在onBind回调方法里面返回这个mBinder对象。
public class MyService extends Service {
private final static String TAG = "MyService";
private final MyBinder mBinder = new MyBinder(this);
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 处理Service的逻辑
return super.onStartCommand(intent, flags, startId);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
// 如果Service需要被绑定,则返回一个IBinder实例
return mBinder;
}
public void setMethod(String str) {
Log.e(TAG, str);
mBinder.setMethodBack();
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
3.在Activity里面使用bindService方式启动MyService,也就是绑定了MyService,并在在ServiceConnection里得到一个IBinder对象,就是第MyService 中onBinder返回的mBinder对象。
serviceIntent = new Intent(this, MyService.class);
connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 当Service连接成功时调用
myBinder = (MyBinder) service;
myBinder.setOnTestListener(new MyBinder.OnTestListener() {
@Override
public void onTest(String str) {
Log.e(TAG, str);
}
});
}
@Override
public void onServiceDisconnected(ComponentName name) {
// 当Service连接断开时调用
}
};
bindService(serviceIntent, connection, Context.BIND_AUTO_CREATE);
4.在合适得时机调用mBinder的传递数据的方法setMethod,例如点击事件等。
myBinder.setMethod("123");
5.当在点击事件发送一条消息后,mBinder会获取这条消息,并发送给MyService,在MyService 执行完成后,又会反馈给mBinder,并通过接口回调的方法,将成功信息反馈给Activity,打印日志如下。