当服务和访问者在一个进程时候,如果需要通信,普通的启动方式无法通信,故采用bindService()服务,返回一个IBinder对象,共安卓客户端调用服务中的方法
关键:接口(isStudent)把两个类连在了一起
应用,访问者
public class MainActivity extends Activity {
private EditText studentno;
private ServiceConnection conn = new StudentServiceConnection();
private IStundent iStundent;
private TextView resultView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
resultView = (TextView) this.findViewById(R.id.resultView);
studentno = (EditText) this.findViewById(R.id.studentno);
Button button = (Button) this.findViewById(R.id.button);
button.setOnClickListener(new ButtonClickListener());
Intent service = new Intent(this, StudentService.class);
bindService(service, conn, BIND_AUTO_CREATE); //绑定服务,中间参数用于数据交换
}
private class StudentServiceConnection implements ServiceConnection{
public void onServiceConnected(ComponentName name, IBinder service) {//连接服务后返回一个IBinder对象
iStundent = (IStundent)service;
}
public void onServiceDisconnected(ComponentName name) {
iStundent = null;
}
}
@Override
protected void onDestroy() { 进程摧毁时解除绑定,进而停止服务
unbindService(conn);
super.onDestroy();
}
private final class ButtonClickListener implements View.OnClickListener{
public void onClick(View v) {
String no = studentno.getText().toString();
String name = iStundent.queryStudent(Integer.valueOf(no));
resultView.setText(name);
}
}
}
定义一个接口,用于IBinder对象调用service的方法
public interface IStundent {
public String queryStudent(int no);
}
开启的服务
public class StudentService extends Service{
private String[] names = {"张飞","李小龙","赵薇"};
private IBinder binder = new StundentBinder();
public String query(int no){
if(no>0 && no<4){
return names[no - 1];
}
return null;
}
@Override
public IBinder onBind(Intent intent) { 用于向<span style="font-family: Arial, Helvetica, sans-serif;">onServiceConnected()方法返回IBinder对象</span>
return binder;
}
private class StundentBinder extends Binder implements IStundent{
public String queryStudent(int no) {
return query(no);
} }
}