二. 实现通过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>();@Overridepublic 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{@Overridepublic String getName(String no) {return query(no);}}}(4) 在页面启动时绑定服务。Intent service = new Intent(this, StudentManageService.class);this.bindService(service, conn, BIND_AUTO_CREATE);(5) 因为绑定服务需要ServiceConnection对象,再书写一个类继承ServiceConnectionprivate class StudnetConnection implements ServiceConnection{@Overridepublic void onServiceConnected(ComponentName name, IBinder binder) {student = (IStudent) binder;}@Overridepublic 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);}
联系客服