Ÿ 使用bindService绑定服务,传入一个自定义的ServiceConnection用来接收IBinder
Ÿ 定义一个业务接口,其中定义需要的使用的方法
Ÿ 服务中自定义一个IBinder继承Binder并实现业务接口,在onBind方法中返回
Ÿ 调用端将IBinder转为接口类型,调用接口中的方法即可调用到服务中的方法
Activity和Service进行绑定示例:
Activity:
public class MainActivity extends Activity {
private QueryService qs;
private EditText editText;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText = (EditText) findViewById(R.id.id);
// 绑定服务, 传入ServiceConnection用来接收IBinder
bindService(new Intent(this, PersonService.class), new MyConn(), BIND_AUTO_CREATE);
}
/*
* 自定义的ServiceConnection用来接收IBinder
*/
private final class MyConn implements ServiceConnection {
public void onServiceConnected(ComponentName name, IBinder service) {
qs = (QueryService) service;
}
public void onServiceDisconnected(ComponentName name) {
}
}
/*
* 根据Id获取联系人
*/
public void queryName(View view) {
String id = editText.getText().toString();
String name = qs.query(Integer.parseInt(id));
Toast.makeText(this, name, 0).show();
}
}
Service:
public class PersonService extends Service {
private String[] data = { "zxx", "lhm", "flx" };
/*
* 当绑定时调用此方法, 返回一个IBinder, 用来调用当前服务中的方法
*/
public IBinder onBind(Intent intent) {
return new MyBinder();
}
/*
* 查询方法
*/
public String query(int id) {
return data[id];
}
/*
* 自定义IBinder, 实现QueryService业务接口, 提供给调用者访问当前服务的方法
*/
private final class MyBinder extends Binder implements QueryService {
public String query(int id) {
return PersonService.this.query(id);
}
}
}
绑定远程服务
Ÿ 远程绑定服务时无法通过同一个接口来调用方法,这时就需要使用AIDL技术
Ÿ 将接口扩展名改为“.aidl”










