bindService

来源:互联网 发布:淘宝网优惠券 编辑:程序博客网 时间:2024/04/28 20:28

一、实例

  bindService用于绑定一个服务。这样当bindService(intent,conn,flags)后,就会绑定一个服务。这样做可以获得这个服务对象本身,而用startService(intent)的方法只能启动服务。

    bindService方式的一般过程:

1、创建service类的一个子类MyService,并创建MyService的一个内部类MyBinder继承自Binder

新建Service类MyService。在MyService类里新建内部类MyBinder,继承自Binder(Binder实现IBinder接口)。MyBinder提供方法返回MyService实例。

    public class MyBinder extends Binder{
        
        
public BindService getService(){
            
return BindService.this;
        }
    }

2、实例化MyBinder得到mybinder对象;MyBinder mybinder=new MyBinder();

3、重写onBind()方法:

 @Override
 public IBinder onBind(Intent intent) {
  return mybinder;
 }

4、在Activity里,实例化ServiceConnection接口的实现类,重写onServiceConnected()和onServiceDisconnected()方法

ServiceConnection conn=new ServiceConnection(){

  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
  }

  @Override
  public void onServiceDisconnected(ComponentName name) {
  }

};

5、在Activity的onCreate()方法里,新建Intent,并绑定服务

        Intent intent=new Intent(MainActivity.this,BindService.class); 
        bindService(intent, conn,BIND_AUTO_CREATE);

 

6、在Activity的onDestroy里面,添加unbindService(conn);

如果不加这一步,就会报android.app.ServiceConnectionLeaked: ******.MainActivity has leaked ServiceConnection的异常。

 

小结一下:bindService()的执行过程如下:

bindService(intent,conn,flag)->Service:onCreate()->Service:onBind()->Activity:onServiceConnected()

 二、总结分析 

分析一下一个应用程序绑定Service的过程:

在这个应用程序的MainActivity的onCreate函数中,会调用bindService来绑定一个服务MyService,这里绑定的意思其实就是在MainActivity内部获得MyService的接口,所以,这个过程的第一步就是要把MyService启动起来。当MyService的onCreate函数被调用起来了,就说明MyService已经启动起来了,接下来系统还要调用MyService的onBind函数,跟MyService要一个Binder对象,这个Binder对象是在MyService内部自定义的MyBinder类的一个实例,它继承于Binder类,里面实现一个getService函数,用来返回外部的MyService接口。系统得到这个Binder对象之后,就会调用MainActivity在bindService函数里面传过来的ServiceConnection实例的onServiceConnected函数,并把这个Binder对象以参数的形式传到onServiceConnected函数里面,于是,MainActivity就可以调用这个Binder对象的getService函数来获得CounterService的接口了。 

        这个过程比较复杂,但总体来说,思路还是比较清晰的,整个调用过程为MainActivity.bindService->MyService.onCreate->MyService.onBind->MainActivity.ServiceConnection.onServiceConnection->MyService.MyBinder.getService

0 0
原创粉丝点击