bindService

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


Activity调用bindService,服务会创建,接着执行onBind方法,该方法返回一个IBinder对象,Activity通过IBinder对象来访问服务里的方法。



bindService方式的一般过程:


①新建类BindService继承Service类。在BindService类里新建内部类MyBinder,继承自Binder(Binder实现IBinder接口)。

MyBinder提供方法返回BindService实例。


    public class MyBinder extends Binder{

        

        public BindService getService(){

            return BindService.this;

        }

    }


实例化MyBinder得到mybinder对象;

MyBinder mybinder =new MyBinder();


重写onBind()方法:

@Override

public IBinder onBind(Intent intent) {

return mybinder;

}


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


ServiceConnection conn=new ServiceConnection(){

 @Override

 public void onServiceConnected(ComponentName name, IBinder service) {

 }

 @Override

 public void onServiceDisconnected(ComponentName name) {

 }

};


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


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

bindService(intent, conn,BIND_AUTO_CREATE);

conn则是一个代表与service连接状态的类,当我们连接service成功或失败时,会主动触发其内部的onServiceConnected或onServiceDisconnected方法。如果我们想要访问service中的数据,可以在onServiceConnected()方法中进行实现,

BIND_AUTO_CREATE//一旦绑定服务就自动创建服务


④在Activity的onDestroy里面,添加


unbindService(conn);

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

bindService()的执行过程如下:

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


你可能感兴趣的:(service)