- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android服务——Service(理论)
Android服务——Service
本章学习内容
1.Android服务概述
2.Android服务生命周期
3.Android Service和Broadcast应用
本章学习目标
1. 了解Android服务
2. 熟悉Android服务生命周期
3. 掌握Android Service和Broadcast应用
1.1 Service概述
Service是Android 的服务,与Broadcast一样在后台运行,不可交互。Service 的级别和
Activity差不多,但Service需要通过一个Activity或其他Context对象进行调用,不能自己
运行。例如,可以使用Context.startService()或Context.bindService()方式启动Service,
但两种方式有所不同。如果Service 的OnCreate或OnStart执行了非常耗时的动作,由于
Service运行在主线程中,会影响程序的UI操作或阻塞主线程中的其他事件,因此最佳方
式为启动一个新线程来运行该Service。
Service的使用时机由应用场景决定。例如,用户在播放多媒体时启动了其他Activity,程序
需要在后台继续播放;如果检测SD卡上文件的变化;在后台记录用户地理信息位置的改变
等。总之,服务隐藏在后面。一个正在从列表中播放歌曲的媒体播放器应用中存在多个
Activity,用户可以选择并播放歌曲。但是,由于用户认为在导航至其他屏幕时音乐应该继
续播放,音乐播放功能并没有对应的Activity。对于媒体播放器,该Activity 会使用
Context.startService()启动一个Service,以保持音乐在后台播放。同时,系统也将保持该
Service一直执行,直到Service运行结束。同理,也可以执行暂停、重播等操作。
1.2 Service生命周期
1.2.1 Service生命周期时序图
与Activity 相比,Service 的生命周期并不复杂,其时序图如图 1.1.1所示。
图1.1.1 Service 的生命周期
1.2.2 Service的生命周期
由Service生命周期的时序图可知以下3点:
(1)调用Context.startService()可以启动一个 Service,该操作可能触发Service 的
onCreate()和onStart()操作。执行startService()一定会触发onStart(),如果该Service 已
经存在于系统中,则onCreate()不会被再次调用,它只在Service第一次启动时触发。通过
Context.startService()启动的 Service 会一直运行,直到被 Context.stopService()或
stopSelf()停止。多次通过startService()启动某个服务并不会生成多个实例,但会导致服务
的onStart()被多次调用。由于只有一个实例,因此无论启动多少次,需要停止时调用一次
Context.stopService()或stopSelf()即可。
(2)通过Context.bindService()获得一个服务的链接,该链接会一直保持,直到被
Context.unbindService()断开为止。如果连接时系统中不存在该服务,则可能会新建一个服
务,此时Service 的onCreate 函数也同样会被调用。连接建立时,Service 的onBinder会
被触发,可以通过onBinder返回连接建立后的IBinder接口对象,使用服务的客户端(如
某个Activity)可以通过IBinder对象和Service交互。由于可能存在多个客户端与某个
Service服务保持连接,当某个链接被客户端主动断开时,会使Service 的链接数减1,当
链接数减至零时Service将被销毁。如果通过bindService()启动一个Service,则它会一直
存在,直到没有任何客户端与该Service保持连接为止。
(3)一个Service可以被启动 (start)或连接 (bind),其生命周期取决于创建方式。当通
过Context.startService()创建时,与(1)中的情况相同;当通过Context.bindService()使
用参数Context.BIND_AUTO_CREATE创建时,则与 (2)中的情况相同。一个Service停
止且被销毁后会触发其onDestroy()函数,完成该Service相关资源的清理,如停止其子
您可能关注的文档
- Advantech WebAccess 功能概述.pdf
- AFM培训资料.pdf
- agilent 1200系列高分离度快速液相色谱系统.pdf
- AFS-AFM60-EtherNet-IP绝对值旋转编码器选型手册(中文版).pdf
- AGBE无线技术手册1.doc.pdf
- AD12 专卖店设计.pdf
- Agilent 1200高效液相色谱培训材料使用说明书.pdf
- Agilent 1290 6400 LCMS Training(液质培训).pdf
- AHF技术手册.pdf
- Agilent 7820气相色谱仪维护手册.pdf
- 2025年矿山无人作业技术智能化设备在矿山智能化矿山战略实施布局中的应用报告.docx
- 2025年老年人旅游市场定制化服务行业产业链上下游资源整合与优化报告.docx
- 2025年数字化教材在幼儿教育中的情感教育与认知发展研究报告.docx
- 2025年生态修复工程资金申请政策解读与申报技巧报告.docx
- 2025年细分医疗领域类:医疗行业市场细分与增长动力分析报告.docx
- 2025年消费与零售行业深度报告:虚拟现实在零售体验中的创新.docx
- 2025年汽车行业供应链韧性提升与风险管理创新案例报告[001].docx
- [商丘]2025年河南省商丘市虞城县消防救援大队政府专职消防员招聘30人笔试历年参考题库附带答案详解.docx
- 01-第一节 直线的倾斜角与斜率.pptx
- 《儿童青少年体能等级测评规范》.pdf
文档评论(0)