分享

5. 客户端与服务之间通信

 黎可图书馆 2013-09-18
一. 定义
通过startService()和stopService()启动关闭服务,适用于服务和访问者之间没有交互的情况。如果服务和访问者之间需要方法调用或者传递参数,则需要使用bindService()和unbindService()启动和关闭服务。

二. 实现
这里模拟一个通过学号查找学生姓名的程序,其中查询用服务实现。
(1) 先创建一个服务,继承Service类。并在AndroidManifest.xml中进行配置。

(2) 在服务中创建query方法
public String query(String no){
return this.studnets.get(no);
}

(3) 书写内部类,继承Binder类。给出方法getName。
public class StudentManageService extends Service {
private Map<String, String> studnets = new HashMap<String, String>();
@Override
public IBinder onBind(Intent intent) {
this.studnets.put("1", "like");
this.studnets.put("2", "chris");
this.studnets.put("3", "sam");
this.studnets.put("4", "jerry");
return new StudentManage();
}

public String query(String no){
return this.studnets.get(no);
}
private class StudentManage extends Binder implements IStudent{

@Override
public String getName(String no) {
return query(no);
}
}

}

(4) 在页面启动时绑定服务。
Intent service = new Intent(this, StudentManageService.class);
this.bindService(service, conn, BIND_AUTO_CREATE);

(5) 因为绑定服务需要ServiceConnection对象,再书写一个类继承ServiceConnection
private class StudnetConnection implements ServiceConnection{

@Override
public void onServiceConnected(ComponentName name, IBinder binder) {
student = (IStudent) binder;
}

@Override
public void onServiceDisconnected(ComponentName name) {
}
}

(6) 在点击事件中调用ServiceConnection中返回的IBinder对象。
public void onClick(View v) {
String no = txtNo.getText().toString();
String name = student.getName(no);
lblName.setText(name);
}

(7) 当窗口销毁时,结束服务
protected void onDestroy() {
super.onDestroy();
this.unbindService(conn);
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多