binder机制是贯穿整个android系统的进程间访问机制,经常被用来访问service,我们结合代码看一下binder在访问service的情形下是怎么具体使用的。
service 你可以理解成没有的界面的activity,它是跑在后台的程序,所谓后台是相对于可以被看得到的程序的,后台程序是不能直接交互的程序。
binder主要是用来进程间通信的,但也可用在和本地service通信。
1. 我们先来看一个与本地service通信的例子。
package com.ckt.wangxin;
import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;
/**
* This is a service stub for both LocalBinderClient
* and RemoteBinderClient
* @author Wang Xin
* @email springnap@163.com
*
*/
public class LocalService extends Service {
@Override
public IBinder onBind(Intent intent) {
return new LocalBinder();
}
public void sayHelloWorld(){
Toast.makeText(this.getApplicationContext(), "Hello World Local Service!", Toast.LENGTH_SHORT).show();
}
public class LocalBinder extends Binder {
LocalService getService() {
// Return this instance of LocalService so clients can call public methods
return LocalService.this;
}
}
}
local servcie 的代码如上,在onBinder方法中返回binder,binder包含了service的句柄,客户端得到句柄以后就可以调用servcie的公共方法了,这种调用方式是最常见的。
客户端代码
package com.ckt.wangxin;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import com.ckt.wangxin.LocalService.LocalBinder;
public class LocalServiceTestActivity extends Activity {
static final String TAG = "LocalBinderTestActivity";
ServiceConnection mSc;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle sav