外观
startService 与 bindService,生命周期差在哪里?
标准回答
只使用 startService 的典型顺序是 onCreate → onStartCommand → stopSelf/stopService → onDestroy;重复启动同一实例会再次调用 onStartCommand,不重复 onCreate。只使用 bindService 创建的服务通常是 onCreate → onBind → 最后一个客户端解绑时 onUnbind → onDestroy。
**既启动又绑定:**解绑并不会取消“已启动”状态,停止启动状态也不等于所有客户端已解绑;两种存活条件都解除后才销毁。重新绑定还可能走 onRebind,取决于实例是否保留和 onUnbind 的返回值。
**实际边界:**以上是正常生命周期,系统直接杀进程不保证调用 onDestroy;后台启动与前台服务限制还需按版本处理。
通俗例子
播放页绑定音乐服务来读取状态,用户返回桌面后页面解绑,但已经启动的播放服务仍可能继续工作。真正停止播放后结束启动状态,且没有客户端绑定,服务才可以结束。
深入解释
**两种存活关系分开看:**被启动的服务承担未结束的工作;被绑定的服务还服务于连接着的客户端。既被启动又被绑定时,结束其中一种关系不一定立刻销毁服务。
**解绑为什么不等于停止播放:**页面解除绑定,只结束这份客户端连接;若服务仍处于启动状态,播放工作可以按系统规则继续。结束播放还需要结束相应工作和启动状态。
易混淆点
前台服务提高用户可感知工作的存活优先级,但不是永久存活或绕过后台限制的通行证。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
job-A02