文章目录
- 一、Service(含分类、场景、原理、进阶)
-
- [1. 请详细对比 started Service(启动服务)与 bound Service(绑定服务)在生命周期、调用方关系、以及销毁条件上的核心区别。](#1. 请详细对比 started Service(启动服务)与 bound Service(绑定服务)在生命周期、调用方关系、以及销毁条件上的核心区别。)
- [2. Android 中的 Service 按运行级别可分为哪几类?(前台服务、后台服务、绑定服务),请分别说明它们的定义、优先级及适用场景。](#2. Android 中的 Service 按运行级别可分为哪几类?(前台服务、后台服务、绑定服务),请分别说明它们的定义、优先级及适用场景。)
- [3. 音乐播放器、即时通讯(IM)、文件下载、天气后台更新,这四个典型场景分别应该使用哪种类型的 Service?请说明理由。](#3. 音乐播放器、即时通讯(IM)、文件下载、天气后台更新,这四个典型场景分别应该使用哪种类型的 Service?请说明理由。)
- [4. 请列举 3 个必须使用前台服务(Foreground Service)的业务场景,并解释为什么这些场景不能用普通后台 Service 或 WorkManager。](#4. 请列举 3 个必须使用前台服务(Foreground Service)的业务场景,并解释为什么这些场景不能用普通后台 Service 或 WorkManager。)
- [5. WorkManager和Service的区别](#5. WorkManager和Service的区别)
- [6. 在 Android 5.0 以上,直接使用 startService 可能会遇到什么问题?官方推荐的替代方案及原理是什么?](#6. 在 Android 5.0 以上,直接使用 startService 可能会遇到什么问题?官方推荐的替代方案及原理是什么?)
- [7. 当一个 Service 处于后台且长时间运行时,它的进程优先级处于哪个层级?系统在内存不足时,回收这类进程的策略是怎样的?](#7. 当一个 Service 处于后台且长时间运行时,它的进程优先级处于哪个层级?系统在内存不足时,回收这类进程的策略是怎样的?)
- [8. 前台服务必须显示通知,在不同 Android 版本(如 Android 13+)中,对前台服务通知的权限和样式有哪些新要求?](#8. 前台服务必须显示通知,在不同 Android 版本(如 Android 13+)中,对前台服务通知的权限和样式有哪些新要求?)
- [9. 什么场景下必须使用 bindService() 而不是 startService()?请举例说明客户端(如 Activity)需要与 Service 进行频繁交互的业务场景](#9. 什么场景下必须使用 bindService() 而不是 startService()?请举例说明客户端(如 Activity)需要与 Service 进行频繁交互的业务场景)
- [10. IntentService 的原理是什么?它有什么优势?为什么现在官方推荐使用 WorkManager 替代它?](#10. IntentService 的原理是什么?它有什么优势?为什么现在官方推荐使用 WorkManager 替代它?)
一、Service(含分类、场景、原理、进阶)
1. 请详细对比 started Service(启动服务)与 bound Service(绑定服务)在生命周期、调用方关系、以及销毁条件上的核心区别。
- 生命周期 :started Service 由 startService 启动,生命周期为 onCreate→onStartCommand→onDestroy,独立运行;bound Service 由 bindService
启动,生命周期为 onCreate→onBind→onUnbind→onDestroy,与绑定组件强相关。 - 调用方关系:started Service 调用方退出后仍可运行;bound Service 随绑定组件销毁而销毁。
- 销毁条件:started Service 需显式停止;bound Service 所有客户端解绑后销毁。
- 通信方式:started Service 单向 Intent 传参;bound Service 通过 Binder 双向交互。
- 使用场景:startedService用于不需要与组件(如Activity)进行通信时,如后台播放音乐、下载等;bindService用于与activity交互,如获取服务状态、数据交互
速记版:started 独立运行,bound 伴生绑定;一个单向传参,一个双向交互。
2. Android 中的 Service 按运行级别可分为哪几类?(前台服务、后台服务、绑定服务),请分别说明它们的定义、优先级及适用场景。
- 前台服务:用户可感知,需常驻通知,优先级极高,适用于音乐播放、导航、文件下载。
- 后台服务:用户无感知,优先级中等,适用于数据同步、日志上传,8.0+ 限制严格。
- 绑定服务:提供交互接口,适用于服务控制、跨进程通信。速记版:前台保活、后台同步、绑定交互。
3. 音乐播放器、即时通讯(IM)、文件下载、天气后台更新,这四个典型场景分别应该使用哪种类型的 Service?请说明理由。
- 音乐播放器:前台服务,需常驻保活,用户感知强。
- 即时通讯:前台服务 / 系统推送,保障长连接稳定。
- 文件下载:前台服务,防止后台被回收。
- 天气更新:WorkManager,非实时、可延迟,适配系统调度。
4. 请列举 3 个必须使用前台服务(Foreground Service)的业务场景,并解释为什么这些场景不能用普通后台 Service 或 WorkManager。
- 导航 / 地图:需持续定位播报,后台易被回收,无法保证实时性。
- 录音 / 录屏:需后台持续工作,普通后台易被系统杀死。
- 长连接推送:自研推送需保活长连接,WorkManager 无法满足实时性。
速记版:后台需持续工作、实时性要求高的场景,必须用前台。
5. WorkManager和Service的区别
- WorkManager 是 Android推荐用于执行可延迟、可约束 的后台任务的库,适合执行那些即使应用退出或设备重启也需要完成的任务,比如数据同步、定时清理等。
- 而 Service 更适合执行需要立即开始并持续运行的任务,比如播放音乐或下载大文件。但在 Android 8 及以上版本中,使用普通Service 会受到后台限制,必须使用前台服务或优先考虑 WorkManager。
Android开发中,service就是普通的后台服务,前台服务对应的类是ForegroundService
6. 在 Android 5.0 以上,直接使用 startService 可能会遇到什么问题?官方推荐的替代方案及原理是什么?
Android 5.0 后禁止隐式 Intent 启动 Service ,否则抛异常;替代方案为显式 Intent,指定组件名,提升安全性。
7. 当一个 Service 处于后台且长时间运行时,它的进程优先级处于哪个层级?系统在内存不足时,回收这类进程的策略是怎样的?
- 后台 Service 进程属于服务进程,优先级低于前台 / 可见进程,高于空进程;
- 内存不足时系统会回收服务进程,回收后是否重启取决于 onStartCommand 返回值。