1、分类:本地服务(Started启动服务)和网络服务(Bound绑定服务)
2、区别:
(1)调用:
Started--startService();进入Service的onStartCommand()方法;
Bound--bindService();进入Service的onBind()方法;绑定是异步的,客户端需要创建ServiceConnection实例来接收onBind()方法返回的IBinder.{ServiceConnection实例需要重写onServiceConnected()和onServiceDisconnected()两个回调方法}
说明:只有Activity、Service和ContentProvider能绑定到服务,BroadcastReceiver不能绑定到服务。
注:当服务第一次创建时,系统会先调用onCreate执行一次性建立过程。
(2)停止/销毁服务
Started--1)组件调用stopService();2)
启动后处于Started状态,会在后台无限期运行,即使调用的组件已销毁。当操作完成时,会调用stopSelf()停止自身服务。当有多个请求时,停止服务使用stopSelf(int)来确保停止服务的请求总是基于最近收到的启动请求。
注:仅当内存不足并且必须回收系统资源时,才会强制停止服务。
Bound--组件与服务解除绑定时(组件调用unbindService()),服务会被销毁。
当客户端销毁时,会将其从服务上解绑定。但当与服务交互或者Activity暂停时,最好解绑定,以便系统能及时停止不用的服务。
注:默认情况下,服务运行于管理它的进程的主线程,不会创建自己的线程,也不会运行于独立的进程。但当服务需要完成CPU密集工作或者阻塞操作(如MP3回收或者联网),开发人员需要在服务中创建新线程来完成这些工作。