一、Service简介
1.两种模式:非绑定service和绑定的service
2.intentservice
3.生命周期方法:
(1)Ibinder onBind(Intent intent)实现service之类必须实现的方法,返回IBinder对象,程序通过该对象与service通信
(2)onCreate() 第一次创建后回调
(3)onDestory()service关闭前回调
(4)onStartCommand(Intent intent, int flags , intstartId)早期版本是onStart(Intent intent , int start Id)调用startService (Intent)启动该service时回调该
(5)boolean onUnbind(Intent intent)service上绑定的所有客户端断开时回调
4.mainfest中配置该service
5.运行方式:
(1)通过context的startService()方法:模式一、访问者这个与service无关,访问者退出,service依然运行
(2)通过context的bindService()方法:模式二、访问者与service绑定,访问者退出service退出
二、非绑定service(第一种启动方式)
1.从android5.0开始必须使用显性intent启动service组件
2.启动:startService 周期:onCreate()-->onStart()--->running关闭:stopService 周期:onDestory--->stop
3.onCreate只在创建时回调,每次启动会回调onStartCommand方法,多次启动不会回调onCreate()
三、绑定的service
1.用处:service和访问者需要交换数据方法调用
2.bindService()完整为:
bindService(Intent , ServiceConnection , int)
service:通过intent制定要启动的service
conn:监听访问者和Service的链接情况,当service的宿主异常终止,导致service与访问者断开回调该对象的onServiceDisconnected(ComponentName)方法(注意:访问者主动通过unbindService断开时,不会回调该方法)
flags:绑定时候是否创建Service(若service未创建),0:不创建 BIND_AUTO_CREATE自动创建
3.多次调用binService()方法不会重复绑定,不管用户调用多少次,onBind只会被执行一次
四、service生命周期
调用startService()>> onCreate() >> onStartCommand()>> service运行中>>调用stopService()>>onDestory()>>service关闭
调用bindService()>>onCreate()>> onBind() >>客户端绑定Service>> 调用unBindService>> onUnbind() >> onDestory()>> service关闭
特殊情形:service已经由startService启动,其他客户端调用bindService绑定,解绑,再绑定 onCreate>> onStartCommand >> onBind >> onUnBind (重写该方法时返回true)>> onRebind 未发现service回调onDestory()方法因为此service不是activity通过bindService方法启动的。
结论:activity调用bindService绑定一个已经启动的Service时, 系统只是把Service内部Ibinder对象传给Activity,不会把Service生命周期完全绑定到activity ,而activity调用unBindService方法解除绑定时,只是切断关联,不会停止该service
五、IntentService
1.存在价值:
service缺点:
(1)Service不会专门启动一个单独的线程,Service与它所在的应用在同一个进程中
(2)Service不是一条新线程,因此不应该在service中处理耗时任务
2.
(1)创建单独的worker线程处理所有intent请求
(2)onHandleIntent()实现代码,无须处理多线程问题
(3)所有请求完成后intentService自动停止。
(4)为service的onBind()方法提供了默认实现,默认的实现返回null
(5)onStartCommand()也提供了默认实现