service是不可见的,它的启动、停止和其他控制操作都是通过其他应用程序组件来实现的。
比如最简单的就是在activity中使用startService()来启动一个服务,使其在后台运行。但如果仅仅是这样的话,我们启动一个service后就只能看着它在后台运行却不能对其进行任何操作了。如果想在activity中能够操作service(调用其中的某些方法,让其完成某些动作),我们就必须先把activity和service绑定起来。
如何绑定activity和service?这需要我们实现service中的onBind()函数以返回service实例给activity
在service这个类中,定义一个内部类继承自Binder
public class MyBinder extends Binder{
public MyService getService(){
return MyService .this;
}
}
private final IBinder binder = newMyBinder();
然后重写MyService 的onBind()方法。
@Override
public IBinder onBind(Intent intent) {
Log.i(LOG,"onBind............");
return binder;
}
这样,就在onBind()方法中获取到binder对象,进而可以获取到MyBinder中的getService,获取到Service的实例对象。
在activity中bindservice()的时候,就可以在ServiceConnection 中获取到service的实例。就实现了activity中获取到service的实例对象。就可以调用service中的方法。