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

时间:2024-03-30 13:40:59

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

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

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

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