第5章–Service应用.pptVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章–Service应用

第五章 Service应用 本章主要内容 什么是Service 跨进程调用 Service实例——音乐播放器 什么是Service 顾名思义,Service即“服务”的意思,它与Activity属于同一等级的应用程序组件,不同的是Activity拥有前台运行的用户界面,而Service不能自己运行,需要通过某个Activity或者其他Context对象来调用。 Service在后台运行,它不能与用户直接进行交互。在默认情况下,Service运行在应用程序进程的主线程之中,但如果需要在Service中处理一些诸如连接网络等耗时操作时,就应该将其放在单独的线程中进行处理,避免阻塞用户界面。可以通过Context.startService()和Context.bindService()两种方式来启动Service。 什么是Service 使用Context.startService()启动Service 经历如下的步骤 Context.startService—onCreate()—onStart()—Service running—onDestroy()—Service stop 如果Service处于未运行的状态,则需要先调用onCreate()然后再调用onStart()的顺序来启动;如果Service已经处于运行状态,则只需要调用onStart()来启动Service即可。onStart()方法可被重复的调用多次。如果是使用这种方式启动Service,那么关闭Service的方法就很简单,可以通过调用stopService()方法停止Service,再调用onDestroy()方法销毁Service。如果调用者直接退出而没有调用stopService,那么Service会在后台一直运行,直到该Service的调用者再次启动后通过stopService关闭Service。这种调用方式的Service生命周期:onCreate()—onStart()(多次)—onDestroy()。 什么是Service 2. 使用Context.bindService()启动Service 该种方法启动Service需要经历如下步骤 Context.bindService()—onCreate()—onBind()—Service running—stopService()—onUnbind()—onDestroy()—Service stop。 onBind将返回给客户端一个IBind接口实例,这个实例允许客户端回调服务方法,比如得到Service的运行状态的操作。这种方法会把调用者(Context,Activity等)和Service绑定在一起,Context退出时,Service也会调用onUnbind()—onDestroy()退出。所以这种调用方式下Service的生命周期为:onCreate()—onBind()(与第一种方式不同,这里onBind()只能绑定一次,不可多次绑定)—onUnbind()—onDestroy()。 跨进程调用 通常应用程序都在一个专属于自己的进程内运行,但有时需要在进程间传递对象,这就涉及到了跨进程调用机制。在 Android平台中,一个进程不能直接访问其他进程的内存区域。为了解决进程间数据共享的问题,需要把对象拆分成操作系统能理解的简单形式,以便伪装成本地对象进行跨界访问,为此就需要跨进程通信的双方约定一个统一的接口。由于编写这种接口的方法具有很大的共性,Android提供了AIDL工具来辅助完成接口的编写工作。 AIDL(Android Interface Definition Language,即Android 接口描述语言)属于IDL语言的一种,借助它可以快速地生成接口代码,使得在同一个Android设备上运行的两个进程之间可以通过内部通信进程进行交互。如果需要在一个进程中(假设为一个Activity)访问另一个进程中(假设为一个Service)某个对象的方法,就可以使用AIDL来生成接口代码并传递各种参数。 跨进程调用 跨进程调用通常是以服务端提供服务供客户端调用的形势存在的。因此要使用AIDL,服务端需要以aidl文件的方式提供服务接口,AIDL工具将生成一个对应的java接口对象,并且在生成的接口中包含一个供客户端调用的stub服务桩类,Stub对象就是远程对象的本地代理。服务端的实现类需要提供返回stub服务桩类对象的方法。使用时,客户端通过onBind方法得到服务端stub服务桩类的对象,之后就可以像使用本地对象一样使用它了。 Service实例——音乐播放器 为了更好的学习和深入的了解Service,这里通过一

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档