通过bindService的方式可以调用Service内部的方法,也是实现远程服务的基础。
实现调用服务内部的方法,需要实现服务的onBind(Intent intent)方法,返回一个IBinder的实现类对象。
而Binder类已经实现了IBinder接口,所以只需集成Binder类即可,代码如下
1.创建Service
1.1创建Service类
public class DemoService extends Service {
//然后在绑定Service的时候 传入这个 MyBinder对象 /** * 其实也不用实现 接口的,这里的接口的作用 只是为了规范化暴露服务部分的方法 * 比如需要暴露服务内部的部分方法,在接口里进行同名定义,在这个MyBinder类中 * 实现即可 */ class MyBinder extends Binder implements BinderInterface{ @Override public void serviceInMethod() { serviceInMethod(); } } @Nullable @Override public IBinder onBind(Intent intent) { return new MyBinder(); } public void serviceInMethod(){ }
}
1.2 在清单文件配置Service,填写类名
2.bindService()启动Service,获取MyBinder对象,调用服务内部的方法
不用的时候不要忘了解除绑定 ,代码如下
private DemoService.MyBinder myBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { //获取MyBinder对象,就可以通过该对象 间接调用服务内部的方法了 myBinder = (DemoService.MyBinder) iBinder; } @Override public void onServiceDisconnected(ComponentName componentName) { } }; private void bindService(){ Intent intent = new Intent(this,DemoService.class); bindService(intent,connection,BIND_AUTO_CREATE); }