Android中StartService和BindService的区别

这是一道简答题,请简练正确的描述一下 。。。。。。谢谢。。。。。

  1. 生命周期:
    startService()方式启动,Service是通过接受Intent并且会经历onCreate()和onStart()。当用户在发出意图使之销毁时会经历onDestroy(),而bindService()方式启动,与Activity绑定的时候,会经历onCreate()和onBind(),而当Activity被销毁的时候,Service会先调用onUnbind()然后是onDestroy()。

  2. 控制方式:
    前者的控制方式需要使用固定的方法,对Service进行单一的操作。而后者由于与Activity绑定,不用考虑其生命周期问题,并且从发送Intent的被动操作,变为可以主动对Service对象进行操作,我们甚至可以建立一个Handler类,对Service进行相关的操作。大大加强了Service的灵活性、可操作性。

https://www.cnblogs.com/AndroidJotting/p/4943809.html

一.生命周期不同,销毁方式不同
1.startService
onCreate->onStartCommand
通过调用stopService 停止服务,否则一直后台运行
->onDestroy()
2.bindService
onCreate->onBind
调用者调用unbindService方法或者调用者Context不存在了(如Activity被finish了),
-> onUnbind->onDestroy
二、创建方式不同
如果是跨进程 bindService 需要创建aidl文件

二、既使用startService又使用bindService的情况
比如 voiceservice,tspservice等。需要先启动服务再绑定服务,这样客户端既可以和服务器通信,且客户端销毁不影响服务端。