关于Android中的Service(服务)和activity的几点联系(还有跨进程通信)

活动和服务可以说是Android应用程序中最重要的两个组件了(虽然一共就4种),应用程序中的大多数功能还是通过它们来实现的。今天总结一下activity和service的联系和操作

Activity(活动)是应用程序的门面,是用户操作的主体。它是”看得见,摸得着“的,然而并不是所有的任务都适合在活动中完成,原因之一就是活动中的操作都是”即时性“的、可以快速反馈的。没人会喜欢有延时的操作,但有时任务是不能”一蹴而就的“,所以合理的设计就是让用户在界面上下达指令,任务直接在后台完成。服务的作用是来完成一些后台任务,比如下载、播放音乐还有通信。在编写程序时,服务有两种开启方式:startService和bindService。关于这两个方法的基础知识就不赘述了。重点说说如何<u>在活动中调用服务里方法</u>

要想从activity调用service的方法,不可以直接创建service对象。只能通过bindService绑定服务后调用

使用bindservice的方法:

  1. 现在service中创建方法
  2. Service中的onBind方法返回的是Binder对象,这个“纽带”对象可以关联service里的 方法,相当于在service这一端伸出钩子
  3. 在activity中的onCreate方法里使用bindService(service, conn, flags)方法,对应一下三步
  4. flags一般等于BIND_AUTO_CREATE--绑定的时候服务不一定存在,没有的话就走Create(但不会走start)
  5. service其实是一个intent,跳转
  6. Conn像是activity端的一个钩子,可以监视服务的状态,implements ServiceConnection

内部有两个要复写的方法:onServiceConnected()和onServiceConnected()

 7.神操作出现了:在onServiceConnected方法里得到Binder对象(全局),使其成为可以 在activity中使用的对象!

 ***<u>(这样的操作在实践的过程中出现了一个问题,请务必看一下[https://blog.csdn.net/baidu_41750439/article/details/84900452](https://blog.csdn.net/baidu_41750439/article/details/84900452))</u>***

还有不要忘记在onDestory()里添加unBindService() 防止报leak错误

混合方式开启服务:

StartService 一旦开启,长期运行

BindService 获得binder对象 调用服务方法

UnBindService 解除绑定,但服务仍在运行

(StopService)

这样操作既能在activity中调用服务中的方法,也能在activity关闭后让服务长期运行,继续服务中的其他任务。

如果需要在其他位置(如活动)中调用的服务内部的方法,也可以将这些方法的调用方法提取出来,变成一个接口,来暴露这些方法。在使用时令自己的binder实现这个接口即可。

这样做还可以方便进程间通信。

跨进程通信

为了实现在一个应用程序(进程)中访问另一个程序中服务的binder对象,就需要把集合了需要被暴露的方法的接口转为aidl格式(去掉public),然后刷新工程目录。此时在gen目录下出现了一个java文件,与原来的接口文件同名,但内容不同。

这个文件里存在一个继承了Binder类并实现了上述接口的stub类,接下来的操作都是通过这个类来执行(因为我们自己的binder同样继承了Binder类并实现了上述接口)

因为原有的接口被更改,所以我们自己创建的binder类也改为继承stub类。到这里,在service中的部署就算完成了。

因为要在activity中使用binder对象(所拥有的、暴露的方法),而此时的binder里的方法又来源于stub,即来源于接口改成的aidl文件,所以需要在activity中同样要存在这样的文件。方法:把aidl文件连包(要同名)带文件一起复制到另一个程序中。另一个程序中的gen目录下也就自动生成了对应的.java文件(stub类)

最后一步,把通过stub类里的asInterface()方法,生成Ibinder对象。ServiceConnection类里的onConnected方法里会传递一个Ibinder参数,但是由于我们的传递方式产生了变化,不能直接获得ibinder对象,必须同过asInterface()转为需要的对象。

暂时就是这样,喵~

欢迎各位大佬补充

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容