在Android中,Service与Activity一样,也是基本组件之一,有“老黄牛”之称的Service默默无闻的在后台工作着,它是没有图形界面的,而且不能自己主动运行,和Window中的服务特别像,而是要通过 Context.startService(),或者Context.BindService(),前一个方法启动的服务与调用者无关,而后一个方法启动的服务是和调用者相关的,调用者一旦退出,服务也就结束了,下面简述服务的开发方法。
第一步.继承自服务类public class MyService extends Service{ }
第二步.我们知道,Android中的每一个Activity组件都要在<application>节点中配置,当然作为组件之一的Service也不例外,配置方法和Activity相似,<service android:name=".MyService"/>
第三步.在应用中便可以调用服务中的方法了,下面以一幅图详细阐述有关服务的开发流程。
图 1
由上图可知,要与服务建立通信,必须要先与服务建立连接,在连接对象中自行定义连接建立以及连接断开之后的操作
MyServiceConnection conn = new MyServiceConnection();
Intent intent = new Intent(this, MyService.class);
bindService(intent, conn, BIND_AUTO_CREATE);//BIND_AUTO_CREATE表示绑定之后自动创建服务
private final class MyServiceConnection implements ServiceConnection{
public void onServiceConnected(ComponentName name, IBinder service) {
myservice=(IService) service;//service就是返回的桥梁,由于在外部无法引用业务方法,故面向接口编程,返回的桥梁service实现了该接口 ————标注————
}
public void onServiceDisconnected(ComponentName name) {
myservice=null;
}
protected void onDestroy() {//Activity销毁后解除与服务的绑定
public class MyService extends Service {
private Binder binder = new MyBinder();
public String getName(int id){//服务中的方法,这样的方法可以定义很多个
return "俞超";
}
@Override
public IBinder onBind(Intent intent) {
return binder;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
}
上面返回的棒子当然有一些方法,而这些方法都是业务方法,可以调用在服务中的一些非业务逻辑方法,这里,读者又可以拿Hibernate中的Connection和Session来比较了,Session中的方法也不过是调用了Connection中定义的一些方法
最后在应用中,我们便可以调用棒子的方法(再次类比Session)了,在第一段代码中添加一个按钮,单击调用即可
IService myservice = null;//在————标注————出返回给用户的,这里面向接口编程,将业务方法定义在接口中是良好的编程习惯,不做解释
Button button = (Button) this.findViewById(R.id.button);
@Override
public void onClick(View v) {
TextView resultView = (TextView) findViewById(R.id.text);
resultView.setText(myservice.getName(56));
}
});
至此,有关服务的基本开发流程介绍完毕,欢迎点评并指出不足!