Skip to content
阅读进度

startService 和 bindService 有什么区别? ​

返回 Android 核心 目录

标准回答 ​

startService 让服务进入“已启动”状态;bindService 建立客户端与服务的连接,通过返回的 Binder 调用能力。二者可以同时存在。

关键机制 ​

  • 首次启动常见顺序:onCreate → onStartCommand。再次 start 通常只触发 onStartCommand;需要 stopSelf / stopService 结束已启动状态。
  • 纯绑定服务首次绑定通常 onCreate → onBind,最后一个绑定解除后可销毁。ServiceConnection 的连接结果是异步到达的。
  • 长期用户可感知任务可能使用前台服务;可延迟且要求可靠执行的工作常用 WorkManager。是否允许启动取决于系统版本、targetSdk 和任务类型。

通俗例子 ​

播放音乐可以让服务保持已启动状态,再由页面 bind 过去调用暂停和查询进度。页面退出解除绑定,不代表播放一定停止。

易混淆点 ​

同进程绑定也能使用 Binder;bindService 并不自动意味着跨进程。前台服务仍受限制,也不是永生进程。

参考资料 ​

补充解释与边界 ​

startService 建立启动状态,适合独立于某次绑定而持续执行的工作;bindService 让客户端获得服务接口并建立绑定关系,适合交互式调用。只有绑定状态的服务在最后一个客户端解绑后通常会被销毁;同时被启动的服务,还需要结束启动状态。(绑定服务)

首次启动一般是 onCreate → onStartCommand,多次启动可多次调用 onStartCommand。首次绑定一般是 onCreate → onBind,解绑涉及 onUnbind。两种使用方式可以组合,生命周期要一起判断。bindService 不等于跨进程,跨进程时才涉及相应 IPC。

长时间设备连接用什么?看业务是否需要用户可感知的持续任务,再考虑符合限制的前台服务或伴生设备能力。普通 Service 不保证进程常驻;前台服务也要满足启动条件、类型和权限要求。(前台服务类型要求)

内容来源 ​

用完整回答理解机制,用真实证据解释项目。