今天看代码看到这样一个用法
Service和Activity的连接可以用ServiceConnection来实现。你需要实现一个新的ServiceConnection,重写onServiceConnected和onServiceDisconnected方法,一旦连接建立,你就能得到Service实例的引用。
private ServiceConnection mBatchOperationConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
mBatchOperationService = ((BatchOperationService.MyBinder) binder)
.getService();
isBatchBind = true;
Log.i(TAG, String.format("Connected to BatchOperationService."));
}
@Override
public void onServiceDisconnected(ComponentName name) {
isBatchBind = false;
Log.i(TAG, "Disconnected from BatchOperationService");
}
};
public void bindBatchService() {
bindService(new Intent(this, BatchOperationService.class),
mBatchOperationConnection, Context.BIND_AUTO_CREATE);
}
注意:
service两个方法的使用:
1. Service中需要创建一个实现IBinder的内部类(这个内部类不一定在Service中实现,但必须在Service中创建它)。在OnBind()方法中需返回一个IBinder实例,不然onServiceConnected方法不会调用。
2. ServiceConnection 的回调方法onServiceDisconnected() 在连接正常关闭的情况下是不会被调用的, 该方法只在Service 被破坏了或者被杀死的时候调用.例如, 系统资源不足, 要关闭一些Services, 刚好连接绑定的 Service 是被关闭者之一,