服务两种启动方式(startService与bindService)的区别

本文详细对比了Android中Service的两种启动方式:startService和bindService的区别。从生命周期、资源消耗及通信能力等方面进行了深入解析,并探讨了两者结合使用的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

综上两篇文章
1.Android Service的基本用法(startService启动方式生命周期)
2.Android Service与Activity之间的通信(bindService启动方式)

区别如下:
一.生命周期上的区别
startService启动服务:Service会经历onCreate()------->onStartCommand()。当执行stopService时,直接调用onDestroy方法。调用者如果没有stopService,Service会一直在后台运行,下次调用者再次启动仍然可以stopService。
多次调用startService,该Service只能被创建一次,即该Service的onCreate()只会被调用一次。但是每次调用startService,onStartCommand()都会被调用。
如图,运行日志:
在这里插入图片描述
bindService启动服务:Service会经历onCreate()----->onBind()。这个时候调用者和Service捆绑在一起。调用者调用unbindService方法或者调用者Context不存在了(如Activity被finish(销毁)了),Service就会调用onUnbind()------>onDestroy()。
第一次执行bindService时,onCreate()和onBind()会被调用,但是多次执行bindService时,onCreate()和onBind()方法并不会被多次调用(下图中的日志空白情况),即并不会多次创建服务和绑定服务。
如图,运行日志:
在这里插入图片描述
二.只有bindService启动服务才能获取绑定后的Service的方法,所以说具体的Service对象必须首先实现Binder(中间人)对象。
三.

  • startService在Activity所在进程被终结后,服务依然在运行。该服务是独立的进程,会占用一定资源—>缺点
  • bindService方便很多。缺点是主进程被终结后,服务便会终止

拓展
既使用startService又使用bindService的情况(同时使用),(想要启动一个后台服务长期进行某项任务又要与其保持通讯)
1.该Service会一直在后台运行。不管如何调用,onCreate()始终只会调用一次。
2.对应startService调用多少次,Service的onStart方法便会调用多少次。
3要终止Service,需要unbindService和stopService同时调用才行。与两者顺序无关。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值