Service简述

一、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()也提供了默认实现


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值