service的绑定
1.bindService(serviceIntent, this,Context.BIND_AUTO_CREATE );这个函数是用来绑定service的,但是由于监听是这个类,所以需要实现ServiceConnection的接口,即实现public void onServiceConnected(ComponentName name, IBinder service);public void onServiceDisconnected(ComponentName name)这两个函数,其中第一个是建立连接的时候就执行的,第二个是建立service被强制撤销所要执行的
2.unbindService(this);这个是解除绑定service的,同样需要设置监听,只不过监听也是本身这个类
3.public IBinder onBind(Intent intent)这个方法是扩展service之后需要重写的方法,这个是一旦建立监听便会执行的操作,如果返回值为NULL,则上面所讲的onServiceConnected函数就不会执行;如果返回的是一个IBinder的对象,则会调用刚才说的那个函数,要想返回IBinder类型的对象,只要声明一个内部类public class serviceBinder extends Binder并建立一个对象即可。
bind service和 start service之间的不同
1.当执行bind时,如果没有建立service,就会建立service,并且一旦取消绑定时,也会将service销毁;然而当执行时service已经建立,则在解除绑定的时候service就不会销毁而存在
2.用startservice建立service时,按home键,把当前的activity暂停,此时service不会被销毁,但是如果用bindservice建立的service则会销毁
3.bindservice可以对service进行数据通信,而startservice只能控制建立和结束
获得service实例---我们通过IBinder来获得
1.在绑定service时我们讲到了建立了一个serviceBinder extends Binder内部类,并实例化返回这个对象,我们就通过它来解决获得service实例的问题,只要获得了service实例那么我们就可以对service操作,及控制输出的数据
2.我们在serviceBinder类中建立一个方法
public EchoService getService()
{
return EchoService.this;
}这个方法可以返回当前service的实例
3.我们在mainactivity中建立一个EchoService的对象echoService,然后在onServiceConnected中将这个变量实例化
public void onServiceConnected(ComponentName name, IBinder binder) {
System.out.println("onBindConnected");
echoService=((EchoService.serviceBinder)binder).getService();
}这样我们就得到了所要的service的实例,进而进一步使用,控制service。