Service
(1)、LocalService
< 1 >、生命周期方法
< 2 >、启动方法
注意:
类别 |
区别 |
startService 启动的服务 |
主要用于启动一个服务执行后台任务,不进行通信。停止服务使用stopService |
bindService 启动的服务 |
该方法启动的服务要进行通信。停止服务使用unbindService |
startService 同时也 bindService 启动的服务 |
停止服务应同时使用stepService与unbindService |
<3>bindservice(Intent service,ServiceConnention conn, int flags)参数
注意:当调用者主动通过unbindService()方法断开与service的连接时,ServiceConnection对象的onServiceDisconnection(ComponentName name)并不会被调用。
< 4 >、生命周期
onStartService ---> OnCreate() --->OnStartCommand() --->Service运行中直到自己停止或被调用者停止 ---> OnDestory()
bindService() ---> OnCreate() ---> onBind() --->运行中 --->onUnbind() ---> OnDestory()
如果service已由某个客户端通过startService()启动了,接下来其他客户端再调用bindService()方法来绑定该service后,再调用UnBindService()解除绑定,最后有调用bindservice()再次绑定,此过程的生命周期为:OnCreate() --->OnStartCommand() ---> onBind() --->onUnbind() [重写此方法时返回true]--->onRebind()
注意:service不会专门启动一条单独的进程,它与所在的应用位于同一进程中,且service也不是专门的一条新线程,不能在service中直接处理耗时任务。如需处理耗时任务要在onCreate方法中启动一条新线程来处理。在activity或broadcastRrceiver中开启的线程会随宿主进程的结束(如activity退出,broadCast本身生命周期就很短)而被终止,这样就可能导致子线程无法执行完成,所有有必要在service中国开启线程来处理耗时任务。
(2)、intentService
(3)、跨进程调用Service(AIDL Service)
<1>、aidl定义接口的源码必须以aidl结尾,接口中的数据类型,除了基本类型、string、list、map、charSequene之外,其他类型都要实现parcelable接口
(4)、前台进程
类别 |
区别 |
应用 |
前台服务 |
会在通知一栏显示 ONGOING 的 Notification, |
当服务被终止的时候,通知一栏的 Notification 也会消失,这样对于用户有一定的通知作用。常见的如音乐播放服务。 |
后台服务 |
默认的服务即为后台服务,即不会在通知一栏显示 ONGOING 的 Notification。 |
当服务被终止的时候,用户是看不到效果的。某些不需要运行或终止提示的服务,如天气更新,日期同步,邮件同步等。 |
前台服务是在做了上述工作之后需要调用 startForeground ( android 2.0 及其以后版本 )或 setForeground (android 2.0 以前的版本)使服务成为 前台服务。这样做的好处在于,当服务被外部强制终止掉的时候,ONGOING 的 Notification 任然会移除掉。