Service
来源:互联网 发布:python绝技 pdf 中文 编辑:程序博客网 时间:2024/05/19 07:10
声明:此文非本人原创,为整理网络资料加自己的一些注解所得。
1.Service的启动一般都是 某个组件调用startService 或者 bindService
2. 通过Android特有的 Binder IPC机制 通知 ActivityServiceManager ,
3.Ams就会直接通过Binder IPC机制 通知 Service 所在的ActivityThread 把这个服务启动起来 (把这个Service的class文件load到内存)
4.如果是BindService ,Ams还会从Service哪里取到一个binder 然后同样通过IPC传给启动他的Activity ,Activity 拿到这个5.binder后就可以和Service通讯了耗时任务同样是需要在异步线程中完成的!
一.通过startService方式启动的Service
1.context.startService() 的生命周期
context.startService() -> onCreate() -> onStartCommand() -> Service running -> context.stopService() -> onDestroy() -> Service stop
如果Service还没有运行,则android先调用onCreate(),然后调用onStartCommand();
如果Service已经运行,则只调用onStartCommand(),所以一个Service的onStartCommand方法可能会重复调用多次。
如果stopService的时候会直接onDestroy,如果是调用者自己直接退出而没有调用stopService或者Service.stopSelfResult()的话,Service会一直在后台运行,该Service的调用者再启动起来后可以通过stopService或者Service.stopSelfResult()关闭Service。
所以调用startService的生命周期为:
2.context.bindService()启动的Service的生命周期(绑定)
context.bindService() -> onCreate() -> onBind() -> Service running -> onUnbind() -> onDestroy() -> Service stop
onBind()将返回给客户端一个IBinder接口实例,IBinder允许客户端回调服务的方法,比如得到Service的实例、运行状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind->onDestroy相应退出。 所以调用bindService的生命周期为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。
public boolean bindService(Intent service, ServiceConnection conn, int flags) { return mBase.bindService(service, conn, flags);}实例化ServiceConnection接口的实现类,重写onServiceConnected() 系统调用这个来传送在service的onBind()中返回的IBinder;
和onServiceDisconnected()方法 service的连接意外丢失时调用(当service崩溃了或被强杀了)
- Service
- Service
- service
- Service
- service
- Service
- Service
- service
- Service
- Service
- Service
- service
- service
- Service
- Service
- Service
- Service
- Service
- 单页应用跳转实现浅析-demo篇
- Appium 日常干货分享
- Vector,ArrayList,LinkedList,SynchronizedList
- splinter安装与入门
- Java事务处理全解析(四)—— 成功的案例(自己实现一个线程安全的
- Service
- 阿里中间件技术栈与架构师能力图
- javafx日期控件
- 数据结构-类似并查集建
- 图论矩乘——BZOJ1706/Luogu2886 [USACO07NOV]Cow Relays
- JVM堆内存参数优化,让性能飞起来
- 1044: 谁家孩子跑最慢*
- JavaScript语言基础---(九)Array
- SQL Server不允许保存更改数据表解决方法