Service

1)、LocalService

< 1 >、生命周期方法

 四大基本组件( 2 )——Service

< 2 >、启动方法

 四大基本组件( 2 )——Service


注意:

类别

区别

startService 启动的服务

主要用于启动一个服务执行后台任务,不进行通信。停止服务使用stopService

bindService 启动的服务

该方法启动的服务要进行通信。停止服务使用unbindService

startService 同时也 bindService 启动的服务

停止服务应同时使用stepService与unbindService


<3>bindservice(Intent  service,ServiceConnention conn, int flags)参数

 四大基本组件( 2 )——Service

四大基本组件( 2 )——Service

四大基本组件( 2 )——Service

 

注意:当调用者主动通过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

四大基本组件( 2 )——Service


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 任然会移除掉。


相关文章: