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端口与客户端建立连接,该连接属于命令通道,利用该通道来下达控 制指令: ...
随机推荐
- python_11_字符编码
什么是字符编码? --世界上有很多国家,每个国家都有自己独特的语言,所以在计算机普及的当今世界, 每个国家都有自己的字符编码,本国的软件运行在其他国家的机器上,会出现乱码, 有utf-8,gbk等各种 ...
- sublime markdown编辑配色
Boxy package control : install package 选择Boxy theme preferences->settings配置: { "color_scheme ...
- android 通过getDimension,getDimensionPixelOffset和getDimensionPixelSize获取dimens.xml文件里面的变量值
dimens.xml里写上三个变量: <dimen name="activity_vertical_margin1">16dp</dimen> <di ...
- thinkphp5踩坑之部署到服务器模板不存在
一个项目部署到Linux服务器上去的时候,发现某些模板竟然会报错说"模板不存在:/Application/Admin/-.", 解决方法:网上有说是因为使用$this->fe ...
- 图片文档倾斜矫正算法 附完整c代码
2年前在学习图像算法的时候看到一个文档倾斜矫正的算法. 也就是说能将一些文档图像进行旋转矫正, 当然这个算法一般用于一些文档扫描软件做后处理 或者用于ocr 文字识别做前处理. 相关的关键词: 抗倾斜 ...
- iOS-Runtime之关于页面跳转的捷径【Runtime获取当前ViewController】
写在前面 在我们操作页面跳转时,如果当前的类不是UIViewcontroller(下面用VC表示),你会不会写一个代理,或者block给VC传递信息,然后在VC里面进行 ///假如targetVc是将 ...
- iOS-UINavigationBar【颜色设置】
UINavigationBar的一些颜色设置,以前老是忘,这次记住了 - (void)setNavigationBar{ ///NavigationBar backgroundcolor[背景色] [ ...
- XBIM 基于 WexBIM 文件在 WebGL 浏览和加载
目录 xBIM 应用与学习 (一) xBIM 应用与学习 (二) xBIM 基本的模型操作 xBIM 日志操作 XBIM 3D 墙壁案例 xBIM 格式之间转换 xBIM 使用Linq 来优化查询 x ...
- chrome无法登陆账号,显示操作超时的解决方案
起因 今天重装了下windows操作系统,准备登陆chrome浏览器,以同步各种插件(你懂的),结果是...无法登陆账号,显示操作超时,真是无语了. 碰到了这个问题第一个直觉是:FQ.突然想到如果修改 ...
- 解决PhpStorm卡顿的问题
以前的开发一直使用phpstorm.可谓是情有独钟,但是发现随着开发phpStorm逐渐变得卡顿,也试过其他的编译器,但是都感觉没有PhpSrom好用,网上百度了一下,看到不一样的回答.只要修改两个J ...