我们前面的操作都是通过Activity启动和停止Service,假如我们启动的是一个下载 的后台Service,而我们想知道Service中下载任务的进度!那么这肯定是需要Service 与Activity进行通信的,而他们之间交流的媒介就是Service中的onBind()方法! 返回一个我们自定义的Binder对象!
基本流程如下:
- 自定义Service中,自定义一个Binder类,然后将需要暴露的方法都写到该类中!
- Service类中,实例化这个自定义Binder类,然后重写onBind()方法,将这个Binder对象返回!
- Activity类中实例化一个ServiceConnection对象,重写onServiceConnected()方法,然后获取Binder对象,然后调用相关方法即可!
TestService2.java:
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class TestService2 extends Service {
private final String TAG = "TestService2";
private int count;
private boolean quit;
// 定义onBinder方法所返回的对象
private MyBinder binder = new MyBinder();
public class MyBinder extends Binder {
public int getCount() {
return count;
}
}
// 必须实现的方法,绑定改Service时回调该方法
@Override
public IBinder onBind(Intent intent) {
Log.i(TAG, <