说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Android AIDL全攻略二 - Service绑定

HTML文档下载 WORD文档下载 PDF文档下载
Android AIDL全攻略二 - Service绑定

作者:Android开发网


   上次我们在 Android AIDL全攻略一 中讲到了AIDL的概念,由于AIDL属于服务相关内容,同时需要涉及到Service绑定问题,作为整个Android AIDL系列教程的第二节我们一起来看下Service绑定问题。我们过去使用一些轻量级的服务可能直接startService启动,通过Service中的onStart方法可以获取执行服务的命令行,其中参数Intent可以传递内容,当然作为低频度的传输也可以考虑Broadcast来交互Activity和Service,但是作为正常专业的长久的服务Android123还是推荐大家使用绑定机制来实现数据的传输。其中系统级别的跨进程服务AIDL就是基于Service绑定方式的。

  作为Service必须重写一个方法就是onBind(),如果使用startService方式启动服务,则我们在onBind()中返回一个null的IBinder对象。今天使用bindService方法将如何写呢? 具体的步骤如下:

  1. 使用bindService方法启动服务,bindService (Intent service, ServiceConnection conn, int flags) 有三个参数,这里大家可能会对第二个ServiceConnection和最后第三个参数的标识感到陌生,一般在我们调用bindService时需要一个ServiceConnection获取服务实例以及状态,代码如下

  private ServiceConnection sc = new ServiceConnection() {
     @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
      Toast.makeText(ctx, "android123 service connected", Toast.LENGTH_LONG).show();
  }
  @Override
  public void onServiceDisconnected(ComponentName name) {
      Toast.makeText(ctx, "android123 service disconnected", Toast.LENGTH_LONG).show();
  }
 };

 这样,我们在服务的连接和断开时都会收到一个Toast的消息提示,而bindService最后的参数一般使用BIND_AUTO_CREATE 标识自动创建。所以一般我们绑定一个服务,使用下面的代码

  bindService(intent, sc, Service.BIND_AUTO_CREATE);

 来启动服务,而解除绑定可以用  unbindService(sc);

 2. 上面说的都是在非具体的Service中进行操作,下面来看看Service需要处理哪些内容:

 public boolean onUnbind (Intent intent) //反绑定服务时做清理工作

 public void onRebind (Intent intent)  //重新绑定时触发

 public abstract IBinder onBind (Intent intent)  //我们需要返回一个IBinder对象,所以要实现这个抽象方法

 3. 实现onBind方法,这里我们简单的给服务的调用者传递一个Service的实例

  public class cwjBinder extends Binder{

  cwjService fetchService()
  {
   return cwjService.this;
  }

}

 我们在构造Service时实例化cwjBinder使用

  cwjBinder binderObj=new cwjBinder();

  这时我们在onBind()的返回时设置为binderObj而不是null了。

 4. 回到我们调用Service的地方,在ServiceConnection中的  onServiceConnected 方法第二个参数就是我们刚才的IBinder实例了, 该方法原型为  public void onServiceConnected(ComponentName name, IBinder service) ,这时我们可以调用 fetchService方法了。有关Android AIDL的另一注意点Android开发网将在明天讲解。

将真彩色图像变为256色灰度(BIG5码):-VB资料 VB利用Image控件实现图形浏览程序 利用VB捕捉并保存屏幕图象 切割一个Container中的图片 -VB资料 VB如何改变桌面的图片? 请问要将输出的文本设置为斜体、粗体,该如何实现? 数据导入导出问题,谢谢 向高手请教CImage类的问题 “醒世恒言”-写给即将跨入IT业的你 用Socket编程时,能否在客户端直接用webform,服务器端用winform. 如何在界面上动态添加Image 如何向image控件中写入数据(很急!…………谢谢) 请教各位高手关于:clientdataset 请教一个弹出窗口的问题 求20篇50字的读后感什么样的都可以,可以不要内容 6篇50字左右读后感 读后感50字什么文章都行,只要是读后感,越少字越好 《琴》的读后感50字 《西游记》读后感1500字. 1500字的西游记读后感 西游记读后感1500字和汤姆索亚历险记1500字不 西游记读后感1500字!内容涉及3篇文章!今天要上 求西游记的读后感1500字 美国药监局将限制使用多种致瘾性处方止旧金山举办“安全街道日”活动宣传安全男子假冒将军谎称中央领导女婿 诈骗超朝鲜在联大声称将继续发射卫星 抵制安日本创意小商品 别针收纳箱争冠之战,伊朗裁判执法市民可到南沙买便宜进口车参加首届中国 蒙古国博览会美墨边界发现超长贩毒隧道最热岗位2568:1带着仙女闯花都都市之魔武全才修仙大炮帝王美女图重生之盛世官商海北州旅游三江旅游乌苏镇旅游铁溪旅游川藏线旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘