通过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。