一句话总结:
service 是 android 的“后台打工人”,分两种类型(前台和后台),两种启动方式(自己干、和人合作干),不同场景用不同姿势。
一、service 的两种类型:
1. 前台服务(必须亮身份牌)
特点:必须显示一个常驻通知(像外卖小哥穿着工服),告诉用户“我正在后台干活”,避免被系统干掉。
适用场景:
- 音乐播放(显示播放通知)。
- 文件下载(显示进度条)。
- 定位跟踪(如导航)。
代码示例:
val notification = buildnotification() // 创建通知 startforeground(1, notification) // 变成前台服务
2. 后台服务(偷偷干活,但容易被抓)
特点:没有通知,默默干活,但 android 8.0 之后限制严格(长时间后台运行会被系统限制)。
适用场景:
- 临时任务(如数据同步)。
- 轻量任务(如定时提醒)。
注意:高版本 android 中,后台服务可能无法长期存活,建议改用
workmanager
或jobscheduler
。
二、service 的两种启动方式:
1. 独立干活(startservice)
特点:
- 通过
startservice()
启动,service 会一直运行,直到主动调用stopself()
或其他组件调用stopservice()
。 - 生命周期:
oncreate()
→onstartcommand()
→ (运行中) →ondestroy()
。
- 通过
适用场景:
- 需要长期运行的任务(如播放音乐)。
- 不依赖其他组件的独立任务。
代码示例:
// 启动服务 val intent = intent(this, myservice::class.java) startservice(intent) // 停止服务 stopservice(intent)
2. 和人合作干(bindservice)
特点:
- 通过
bindservice()
启动,service 和组件(如 activity)绑定,绑定解除后 service 可能被销毁。 - 生命周期:
oncreate()
→onbind()
→ (运行中) →onunbind()
→ondestroy()
。 - 可以通过
ibinder
接口实现组件和 service 的双向通信(比如控制音乐播放进度)。
- 通过
适用场景:
- 需要与界面交互的任务(如控制下载进度)。
- 多个组件共享同一个 service。
代码示例:
// 绑定服务 val connection = object : serviceconnection { override fun onserviceconnected(name: componentname?, binder: ibinder?) { // 获取 service 的接口,进行交互 } override fun onservicedisconnected(name: componentname?) {} } bindservice(intent, connection, context.bind_auto_create) // 解绑服务 unbindservice(connection)
三、混合模式(start + bind)
特点:
- 先
startservice()
让 service 长期运行,再bindservice()
进行交互。 - 适用场景:音乐播放器(长期播放 + 界面控制进度)。
- 先
销毁条件:必须同时调用
stopservice()
和unbindservice()
才会销毁。
四、intentservice(已过时,但要知道)
特点:
- 自带工作线程,任务按顺序执行,干完活自动关闭。
- android 8.0 后受限,推荐改用
workmanager
或jobintentservice
。
代码示例:
class myintentservice : intentservice("myintentservice") { override fun onhandleintent(intent: intent?) { // 在子线程执行耗时任务 } }
五、如何选择启动方式?
场景 | 启动方式 | 类型 |
---|---|---|
长期任务(如音乐播放) | startservice() | 前台服务 |
临时交互(如下载控制) | bindservice() | 绑定服务 |
轻量后台任务(如数据同步) | workmanager | 后台服务替代 |
总结
前台服务:要亮通知,适合用户感知的任务。
后台服务:尽量少用,高版本 android 限制多。
启动方式:
- 独立干:用
startservice()
,记得关。 - 合作干:用
bindservice()
,绑定完记得解。
- 独立干:用
口诀:
- “长期亮牌用前台,临时合作用绑定,高版本别硬杠,workmanager 更稳当” 。
以上就是android里面的service种类以及启动方式的详细内容,更多关于android service种类及启动的资料请关注代码网其它相关文章!
发表评论