AndroidDev 板


LINE

这其实是小弟在复习 Service的时候顺便做的笔记,希望各位大大能不吝指教~ 网页版连结:http://blog.csdn.net/shanwu1985/article/details/41439521 ref:http://developer.android.com/guide/components/bound-services.html? Bound Service 「Bound Service是 Client-Server Interface 中的服务端,一个 Activity 可以透过 Bound Service 绑定一个服务,收发讯息,甚至进行进程间通讯。」Service类是一个 Abstract Class,而 Bound Service实现了 Service类,并实现了 onBind()方法,Activity 才能和 Service进行沟通。 所以,我们先从简单的例子--让一个 Activity 绑定一个 Service,让 Service 能够为 Activity 提供服务,同时,我已将练习的相关代码提交至 GitHub上(https://github.com/shanwu/InterProcessCommPractice),有不同的分枝分别代表不同的例子,这样可以使用 Github上的分枝比较功能()比较不同方法间的差异。 master 分枝:进程内通讯,代表的是官网 Extending the Binder class的例子。 ipc_messanger_example:跨进程通讯,代表的是官网 Using a Messenger的例子            (抱歉 branch 名英文拼错 Orz) ipc_messenger_example_bidirection:同上,但是其为 Service, Activity 双向                 互传的例子。 ipc_aidl_example:跨进程通讯,简单的 aidl 使用例子。 Extending Binder Service 客户端的 Activity 可以透过呼叫 bindService()方法和服务端的 Service建立连结, 连结建立的时候,会先调用 Bound Service的 onBind() 方法,再来调用 onServiceConnected(),而如果是需要移除连结的话,便调用 unbindService()方法, 此时Bound Service会直接调用 onDestory(),然後服务结束。 在Bound Service写一个继承 Binder的类-LocalBinder,主要是在进程内通讯时, 在 onBind()的时候,能够用方法来返回 Bound Service的对象: [java] view plaincopy public class LocalBinder extends Binder { public Service getService() { return WorkerService.this; } } 宣告一个 LocalBinder的私有全局变量 [java] view plaincopy public class WorkerService extends Service { private final IBinder mBinder = new LocalBinder(); 同时覆写 onBind()方法 [java] view plaincopy @Override public IBinder onBind(Intent intent) { Log.d("guang","onBind"); return mBinder; } 而在Activity端,我们需要使用 bindService()来进行绑定 Bound Service的工作 [java] view plaincopy @Override public void onClick(View v) { final int id = v.getId(); switch (id) { case R.id.btn_start: Intent intent = new Intent(MainActivity.this, WorkerService.class); bindService(intent, mServiceConn, Context.BIND_AUTO_CREATE); break; 同时我们需要将接口 ServiceConnection的方法覆写,在连结开始的时候, iBinder便是onBind所返回的 IBinder类变量,所以我们将它强转为LocalBinder, 然後调用LocalBinder里的方法以取得 Bound Service 的对象,将它存於全局 变量中,之後便可以调用他的方法。这边要注意的是 onServiceDisconnected 一般情况下不会调用,只有在 Service发生异常导致连结结束才会调用。 [java] view plaincopy mServiceConn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { WorkerService.LocalBinder lBinder = (WorkerService.LocalBinder) iBinder; mService = (WorkerService) lBinder.getService(); Log.d("guang","onServiceConnected"); mIsBind = true; } @Override public void onServiceDisconnected(ComponentName componentName) { Log.d("guang","onServiceDisconnected"); mIsBind = false; } }; 调用它的方法 [java] view plaincopy case R.id.btn_sing: if (mIsBind) { mService.makeSingingService(); } break; 全部代码均可自 GitHub取得~ --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 222.128.142.203
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1416840779.A.AFB.html







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP