四大组件--Service

本文用于个人学习。

简介:

Service与Activity类似,但一直在后台运行,没有UI,当应用在运行时不需要与用户交互,即可考虑使用Service,否则使用Activity。Service与Activity一样不能进行耗时操作,否则会出现ANR异常。

注:下文客户端指启动或绑定service的组件(Context),不知道该叫什么所以统一用客户端代替( ̄▽ ̄)~*

生命周期:

1.通过startService()启动: onCreate() -->  onStartCommand(当客户端调用startService()时回调) --> 运行 -->onDestroy() -->  关闭
2.通过bindService()启动: onCreate() --> onBind(返回一个IBinder对象,用于service与应用程序交流) --> 绑定运行 -->
 onUnbind(当绑定该Service的所以客户端都解绑时回调)
 -->onDestroy() -->  关闭
IBinderIBinder是远程对象的基本接口,用于进程间通信。(通过定义AIDL文件进行(Android Interface definition language))
Binder是Ibinder的实现类,通常返回Binder的子类给客户端,实现客户端与service的实时通信。
注:onBind()是必须重写的方法,返回一个IBinder对象。

启动与停止:

1.startService(Intent intent): 对应stopService(Intent intent), 同一个Service可以被同一个客户端多次启动,但多次启动一个已有的Service只调用 一次onCreate(), 但每次启动都会回调onStartCommand()。通过该方法启动的Service无法直接与访问者进行交互。
2.bindService(Intent intent, ServiceConnection conn, int flags):对应unbindService(ServiceConnection conn)。
flags参数:指定绑定时是否自动创建service(0为不自动创建,BIND_AUTO_CREATE为自动创建)。这个参数说明了Service的启动与绑定其实是两个互不相关的概念,当Service启动即开始运行,需要与客户端交互时就在客户端绑定。所以当一个Service启动后再被绑定,即使客户端调用了unbindService(),Service也不会停止,只是切断了与Service的联系
ServiceConnection conn参数:ServiceConnection 的实例对象是service与客户端进行实时交互的关键,在实例化该对象时需要在匿名内部类中重写
onServiceConnected()和onServiceDisconnected()方法:前者当成功与service连接时回调,返回一个IBinder实例,
客户端可以通过该实例(通常是自定义的Binder子类的实例)中的方法与service进行交互,当与本地Service连接时
onServiceConnected()将会得到onBind()方法中返回的IBinder对象。
startService()不同,无论客户端对同一service调用多少次bindService(),只会回调一次onBind()方法。当客户端直接调用unbindService()时,系统会
先调用onBind(),然后onUnbind(),最后onDestroy()。

IntentService简述:

1.IntentService主要为了弥补Service的两点不足:不会启动新的进程(与应用在同一进程)和 在主线程运行(不能进行耗时操作)。
2.运行原理:IntentService使用队列管理客户端请求的Intent,并对每一个Intent启动一条新的线程进行处理,通过重写onHandleIIntent()方法处理业务。当Intent处理完毕后,IntentService会自动停止。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值