一句话总结:
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种类及启动的资料请关注代码网其它相关文章!
发表评论