Android开发之Service浅谈

在Android中,Service与Activity一样,也是基本组件之一,有“老黄牛”之称的Service默默无闻的在后台工作着,它是没有图形界面的,而且不能自己主动运行,和Window中的服务特别像,而是要通过 Context.startService(),或者Context.BindService(),前一个方法启动的服务与调用者无关,而后一个方法启动的服务是和调用者相关的,调用者一旦退出,服务也就结束了,下面简述服务的开发方法。
第一步.继承自服务类public class MyService extends Service{ }
第二步.我们知道,Android中的每一个Activity组件都要在<application>节点中配置,当然作为组件之一的Service也不例外,配置方法和Activity相似,<service android:name=".MyService"/>
第三步.在应用中便可以调用服务中的方法了,下面以一幅图详细阐述有关服务的开发流程。
Android开发之Service浅谈
图 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销毁后解除与服务的绑定
    unbindService(conn);
    super.onDestroy();
    }
  结合上图,一旦与服务建立连接(onServiceConnected(...))之后,便返回一个棒子对象,读者可以对比Hibernate中得Connection和Session之间的关系来看,通过服务返回的棒子就可以返回服务中得一系列方法了,但是返回的棒子应该如何定义呢?显然这根棒子是服务里面的一部分,用户自行定义,这里就以getName(int id)方法为例定义一根棒子
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();
}
    private final class MyBinder extends Binder implements IService{//自定义返回的棒子,添加一些业务方法,
    public   String getName(int id){//返回给用户的方法
    return MyService.this.getName(23);
    }
    }
}
上面返回的棒子当然有一些方法,而这些方法都是业务方法,可以调用在服务中的一些非业务逻辑方法,这里,读者又可以拿Hibernate中的Connection和Session来比较了,Session中的方法也不过是调用了Connection中定义的一些方法
最后在应用中,我们便可以调用棒子的方法(再次类比Session)了,在第一段代码中添加一个按钮,单击调用即可
IService myservice = null;//在————标注————出返回给用户的,这里面向接口编程,将业务方法定义在接口中是良好的编程习惯,不做解释
Button button = (Button) this.findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView resultView = (TextView) findViewById(R.id.text);
resultView.setText(myservice.getName(56));
}
});
至此,有关服务的基本开发流程介绍完毕,欢迎点评并指出不足!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值