Service工作过程
Service两种工作状态的作用
1)启动状态:用于执行后台计算
2)绑定状态:用于其他组件和Service的交互
注意:Service这两种状态可以共存,即Service既可以处于启动状态也可以同时处于绑定状态
Service启动过程
ContextWrapper.startService-->
ContextImpl.startService-->
ContextImpl.startServiceCommon-->
ActivityManagerNative.getDefault().startService-->
ActivityManagerService.startService-->
ActiveServices.startServiceLocked-->
ActiveServices.startServiceInnerLocked-->
ActiveServices.bringUpServiceLocked-->
ActiveServices.realStartServiceLocked-->
ApplicationThread.scheduleCreateService-->
(Handler)H.handleMessage-->
ActivityThread.handleCreateService-->
ActivityThread.handleServiceArgs-->
Service.onStartCommand
handleCreateService主要完成几件事:
1)通过类加载器创建Service的实例
2)创建Application对象并调用其onCreate,当然Application的创建过程只会有一次
3)创建ContextImpl对象并通过Service的attach方法建立二者之间的关系,这个过程和Activity实际上是类似的,毕竟Service和Activity都是一个Context
4)调用Service的onCreate方法并将Service对象存储到ActivityThread中的一个列表中
Service绑定过程
ContextWrapper.bindService-->
ContextImpl.bindService-->
ContextImpl.bindServiceCommon-->
ActivityManagerService.bindService-->
ActiveServices.bindServiceLocked-->
ActivityManagerService.bringUpServiceLocked-->
ActivityManagerService.realStartServiceLocked-->
ApplicationThread.scheduleBindService-->
ActiveServices.requestServiceBindingLocked-->
ActivityThread.handleBindService-->
ServiceConnection.onServiceConnected-->
ActivityManagerNative.getDefault().publishService-->
ActivityManagerService.publishService-->
ActiveServices.publishServiceLocked-->
ServiceDispatcher.InnerConnection.connected()-->
ServiceDispatcher.connected()-->
RunConnection.run-->
ServiceDispatcher.doConnected-->
ServiceConnection.onServiceConnected
No1:
ServiceDispatcher起着连接ServiceConnection和InnerConnection的作用
No2:
bindServiceCommon主要完成两件事:
1)将客户端的ServiceConnection对象转化为ServiceDispatcher.InnerConnection对象
2)接着通过AMS来完成Service的具体的绑定过程,这对应于AMS的bindService方法
Service工作过程的更多相关文章
- Dubbo中@Service工作过程解析
Dubbo中@Service工作过程解析 Spring中的BeanPostProcessor 首先我们应当了解到在spring体系中BeanPostProcessor是什么.加载流程 它是什么 Bea ...
- 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程
第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...
- 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)
一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...
- 【转】Java学习---解析Java Servlet工作过程
[原文]https://www.toutiao.com/i6594316694657696264/ 解析Java Servlet工作过程 Servlet简介 Servlet是sun公司提供的一门用于开 ...
- 【流媒体】UPnP的工作过程
UPnP简介 通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议. 该协议的目标是使家庭网络(数据共 ...
- 【Android开发艺术探索】四大组件的工作过程
个人博客 http://www.milovetingting.cn 四大组件的工作过程 四大组件:Activity.Service.BroadcastReceiver.ContentProvider ...
- 《CPU的工作过程》
本文转载自inter官方网址:https://software.intel.com/zh-cn/articles/book-Processor-Architecture_CPU_work_proces ...
- 测试或运维工作过程中最常用的几个linux命令?
大家在测试工作过程中,可能会遇到需要你去服务器修改一些配置文件,譬如说某个字段的值是1 则关联老版本,是0则关联新版本,这时候你可能就需要会下vi的命令操作:或者查看session设置的时长,可能需 ...
- 主动模式下FTP的详细工作过程(转) 挺详细
主动模式下FTP的详细工作过程 PORT FTP是常用的FTP工作方式,当客户端的连接请求到来时,FTP服务器会利用默认的21端口与客户端建立连接,该连接属于命令通道,利用该通道来下达控 制指令: ...
随机推荐
- springmvc图片上传(兼容ie8以上,实时预览)
html代码: <form id="uploadform" method="post" enctype="multipart/form-data ...
- 编译原理-NFA构造DFA
本题摘自北邮的编译原理与技术. 首先,根据此图构造状态转换表 表中第一列第一行表示从第一个符号B通过任意个空转换能到达的节点,Ia表示由此行的状态数组({B,5,1}可以看作0状态)经过一个a可以到达 ...
- CentOS7搭建时间服务器-chrony(不坑)
标签(linux): chrony 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 之前centos6我们一直用的ntp时间服务器,虽然到CentOS7上也可以装 ...
- spring之setter注入
setter注入分为2种 第一:普通属性注入 <bean id="userAction" class="com.xx.action.UserAction" ...
- 《Thinking in Java》学习笔记(六)
1.Class相关知识 Class类可以理解为类的图纸,通过Class类可以分析类的结构.构建出类的实例. Class.forName("test.TestClass").newI ...
- 洛谷 [P3254] 圆桌问题
简单最大流建图 #include <iostream> #include <cstdio> #include <cstring> #include <cmat ...
- C++ 关于字符串总结(持续更新)
1.find_first_of size_type find_first_of( const basic_string &str, size_type index = 0 ); size_ty ...
- EFCore数据库迁移命令整理
前言 因为现在用.net core 开发新项目,过程中需要经常涉及到数据命令的迁移,今天分别整EFCore 的两种迁移数据库的方式 1 程序包管理器控制台 , Package Manager Con ...
- testng 异常 截图
testNG里有一个异常监听类,失败时会执行类里的相关方法 DriverBase 截图类 TestngListenerScreen 异常监听类 Test1 测试类1.DriverBase类 packa ...
- php + 和 array_merge的区别
(1)对于+,当key相同时,都是舍弃后面的结果: array_merge ,当key相同时,key是字符,则后面的覆盖前面的:key是数字,则不发生覆盖,会重新建立数组索引. $arr1 = arr ...