通过startService()激活的Service,是启动模式的Service。
绑定模式的Service,可以将其他组件与Service绑定,从而调用Service中的方法,方便地实现组件间的通信。
开发时,首先需要确定Service要执行的操作,比如在编写音乐播放器的代码中,可以写一个IMusicPlayer接口,在接口中声明需要用到的方法(在activity中调用service的方法)。
然后需要创建自定义类,继承Service并注册。
接着要重写Service中的onBand()方法,可以在方法中写在绑定时要执行的业务代码。
比如音乐播放器中,可以在onBand()方法中通过工厂模式创建出产生歌曲数据的对象,并获取数据,以及对MediaPlayer的初始化等,当然这写业务代码也可以写在onCreate()方法中。
需要注意的是,绑定模式的Service,onBand()方法的返回值不能为null,类型为IBinder,推荐使用自定义类继承Binder来实现。不要忘记,在自定义此类时,需要实现先前写好的IMusicPlayer接口。重写需要用到的方法,这样就建立起了与其他组件间的桥梁,即可以在其他组件中(activity)调用Service中的方法。
接下来可以在其他组件中调用bindService()方法来绑定Service,需要3个参数。第一个为Intent,用来配置要被绑定的Service,第二个参数为ServiceConnection。ServiceConnection是一个接口,需要自定义类来实现。
在这个类中有两个方法,onServiceDisconnected()为服务断开时执行的方法,多数情况用不到,可以不写。需要注意的是第二个方法,即onServiceConnected()方法。
这个方法中的第二个参数为IBinderService,比较关键,起到一个类似遥控器的作用。将该参数转为先前定义的IMusicPlayer类型,即可使用所有在Service中重写的IMusicPlayer方法,实现组件间的通信。
第三个参数为标识,使用常量BIND_AUTO_CREATE。
最后在当前组件的onDestroy()中调用unbindService()方法取消绑定,参数为之前bindService()方法中的第二个参数。
绑定模式Service的生命周期:onCreate(),onBind(),onUnbind(),onDestroy。