实现活动和服务的通信:
1.依然通过Intent,不过这一次需要多两个对象:Binder和ServiceConnection(匿名类)
1.1 Binder中将实现活动想做的事情;
1.2 ServiceConnection将活动、服务以及Binder对象连接起来连接起来:在connection对象的内部将实现监听服务与活动绑定是否成功两个方法,在绑定成功的方法中可以获取到Binder对象,然后就可以实现Binder中想做的事情。
2.在自己的Service实现类中创建一个类继承Binder类,并在里面可以创建任何自己想要的行为。在Service实现类中实例化出这个Binder类,在service的onBind方法中return 这个实例。
class DownLoadBinder extends Binder
{
public void startDownload()
{
Log.d("gu", "startDownload");
}
public int getProgress()
{
Log.d("gu", "getProgress");
return 0;
}
}
@Override
public IBinder onBind(Intent intent)
{
return mBinder;
}
3.Bind Service,调用bindService方法,方法传入三个参数:Intent 、ServiceConnection对象、flag标志位。
Intent bindIntent = new Intent(MainActivity.this, MyService.class);
bindService(bindIntent, conn, BIND_AUTO_CREATE);
BIND_AUTO_CREATE:表示活动和服务进行绑定后,自动创建服务,者会使得MyService的onCreate得到执行,但是onStartCommand得不到执行。
4.ServiceConnection中的onServiceDisconnected()方法在正常情况下是不被调用的,它的调用时机是当Service服务被异外销毁时,例如内存的资源不足时这个方法才被自动调用。