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工作过程的更多相关文章

  1. Dubbo中@Service工作过程解析

    Dubbo中@Service工作过程解析 Spring中的BeanPostProcessor 首先我们应当了解到在spring体系中BeanPostProcessor是什么.加载流程 它是什么 Bea ...

  2. 《Android开发艺术探索》读书笔记 (9) 第9章 四大组件的工作过程

    第9章 四大组件的工作过程 9.1 四大组件的运行状态 (1)四大组件中只有BroadcastReceiver既可以在AndroidManifest文件中注册,也可以在代码中注册,其他三个组件都必须在 ...

  3. 框架源码系列四:手写Spring-配置(为什么要提供配置的方法、选择什么样的配置方式、配置方式的工作过程是怎样的、分步骤一个一个的去分析和设计)

    一.为什么要提供配置的方法 经过前面的手写Spring IOC.手写Spring DI.手写Spring AOP,我们知道要创建一个bean对象,需要用户先定义好bean,然后注册到bean工厂才能创 ...

  4. 【转】Java学习---解析Java Servlet工作过程

    [原文]https://www.toutiao.com/i6594316694657696264/ 解析Java Servlet工作过程 Servlet简介 Servlet是sun公司提供的一门用于开 ...

  5. 【流媒体】UPnP的工作过程

    UPnP简介 通用即插即用(英语:Universal Plug and Play,简称UPnP)是由“通用即插即用论坛”(UPnP™ Forum)推广的一套网络协议. 该协议的目标是使家庭网络(数据共 ...

  6. 【Android开发艺术探索】四大组件的工作过程

    个人博客 http://www.milovetingting.cn 四大组件的工作过程 四大组件:Activity.Service.BroadcastReceiver.ContentProvider ...

  7. 《CPU的工作过程》

    本文转载自inter官方网址:https://software.intel.com/zh-cn/articles/book-Processor-Architecture_CPU_work_proces ...

  8. 测试或运维工作过程中最常用的几个linux命令?

     大家在测试工作过程中,可能会遇到需要你去服务器修改一些配置文件,譬如说某个字段的值是1 则关联老版本,是0则关联新版本,这时候你可能就需要会下vi的命令操作:或者查看session设置的时长,可能需 ...

  9. 主动模式下FTP的详细工作过程(转) 挺详细

    主动模式下FTP的详细工作过程   PORT FTP是常用的FTP工作方式,当客户端的连接请求到来时,FTP服务器会利用默认的21端口与客户端建立连接,该连接属于命令通道,利用该通道来下达控 制指令: ...

随机推荐

  1. javaweb后台转码

    为什么需要转码? 客户端向服务器发送请求的四种情况:1.URL方式直接访问;2.页面链接(属于get请求);3.表单get提交;4.表单post提交 1.url(url和页面链接):各大浏览器.各个操 ...

  2. 关于 tomcat 配置时遇到的问题与警告及解决办法

    首先,我们在日常配置 tomcat 时,总是会遇到这样的问题: 有时候我们会重新头来配置 tomcat,但是现在我们并不需要那么做,方法很简单,请继续往下看: 这个问题是告诉我们 tomcat 在 4 ...

  3. 关于oracle视图小结

    关于oracle的视图小记:一. 视图:就是对SQL语句的封装,使用起来更方便.不易出错 优点: 1.简化数据操作:视图可以简化用户处理数据的方式 2.着重于特定数据:不必要的数据或敏感的数据可以 不 ...

  4. 微信H5支付网络环境未能通过安全验证,请稍后再试(获取终端ip )

    在写微信H5支付的时候需要获取终端IP使用官方的方法是不对的报错如下: 故重写一个:如下 function get_client_ip(){ if(getenv('HTTP_CLIENT_IP') & ...

  5. jsp页面取值

    一般就用el表达式 ${recordList[4].baseRate8.split("/")[0] } <s:date name="recordList[#id]. ...

  6. golang变量作用域问题-避免使用全局变量

    最近遇到了一个变量作用域的问题,一个比较低级的问题,可能作为一个熟手不应该犯这样的低级错误,但是golang的语法特点可能让你稍微不注意就踩坑,嘿嘿. 变量作用域 全局变量的作用域是整个包,局部变量的 ...

  7. fopen fclose feof fgets fetl

    fopen :Open file, or obtain information about open files 例如 fid = fopen(filename, permission)%许可包括: ...

  8. 【原创】POI 生成Excel文件并下载

    ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 效果图: 实现 1.在pom中添加依赖: <!-- https://mvnrepository.com/artifact/org.apa ...

  9. Jmeter_脚本参数化与内存溢出的解决方案

    这一篇文章随便说一下JMETER的脚本参数化 1:Parameters的两种参数化方法 1.1:函数助手参数化 首先准备你的参数数据.我在bin/data中新建了一个dat文件,记事本另存为修改编码为 ...

  10. mongodb- Java API 查询操作

    package com.x.mongodb; import java.net.UnknownHostException;import java.util.Collection;import java. ...