一、 开场白:谁是需要“启动”的服务?
想象一下这个场景:你正在一个音乐App里点击播放周董的《夜曲》,然后顺手切到微信跟朋友吐槽老板。这个时候,音乐不能停啊!是谁在背后任劳任怨地继续播放音乐?
Bingo!就是咱们今天的主角——Started Service。
你可以把它理解成你们公司里一个没有工位、没有颜值、但能力超强的特种兵。你不需要知道它长啥样(没有UI),也不需要跟它面对面沟通(没有交互)。你只需要给它下达一个指令:“去,把这首《夜曲》给我播了!”(调用 startService),它就会领命而去,在后台的某个角落里默默工作,直到任务完成(音乐播完)或者你命令它“可以了,解散吧!”(调用 stopService 或它自己 stopSelf)。
它和它的表弟(Bound Service)有啥不同?
简单说:
- Started Service(启动服务):我让你干嘛你就干嘛,干完了自己知道下班。任务导向,干完就走。
- Bound Service(绑定服务):咱俩得一直保持联系,我随时给你下指令,你随时给我汇报进度。通信导向,像个贴身秘书。
今天,咱们重点聊聊这位“独行侠”——Started Service。
二、 核心原理深度扒皮:启动服务的“生老病死”
一个Started Service的生命周期,简单得像一条直线,但每一步都暗藏玄机:
onCreate() -> onStartCommand() -> 运行中... -> onDestroy()
onCreate():服务的“新生儿礼”
-
- 这是服务第一次被创建时调用的,而且只调用一次。适合在这里做一次性的初始化工作,比如初始化播放器、创建通知渠道等。
- 坑点预警:如果服务已经在运行,你再多次调用
startService,onCreate是不会再被触发的!服务对象只有一个。
onStartCommand(Intent intent, int flags, int startId):真正的“工作启动台”
-
- 这是每次你调用
startService(intent)时,系统都会调用的方法。你的任务指令(Intent)就是在这里接收的。 - 参数解读:
- 这是每次你调用
-
-
Intent intent:启动服务时传来的“鸡毛信”,里面可以携带数据,比如要下载的文件URL。int flags:系统给的“启动小贴士”,比如START_FLAG_RETRY(上次被杀了重试)等,一般不用太关心。int startId:超级重要! 每次启动服务的唯一ID。好比是工单号,你凭这个工单号才能正确地
-

最低0.47元/天 解锁文章
563

被折叠的 条评论
为什么被折叠?



