转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52203903

前言:为什么要了解系统Activity,Service,BroadCastReceiver,ContentProvider的启动流程,这是一个对于即将理解插件中的四大组件动态注册,占坑的前提,如果不了解的话,那么很难了解插件hook哪此东西,又是如何骗过AMS来启动Activity,Service,BroadCastReceiver,ContentProvider?

本节主要记录系统Service的启动流程:
先看时序图:

与Activity组件的启动方式很像,Service启动分为隐式和显式两种,对于隐式启动Service组件来说,我们只需要知道它的组件名称,而对于显示的Service组件来说,需要知道它的类名称。
以一个后台播放音乐场景来说明:
通过实现一个MyService来实现一个异步任务来播放后台音乐

MyActivity.java

MyService.java

MyActivity组件绑定MyService的过程:

  • 1.MyActivity向ActivityManagerService发送一个绑定CounterService组件的进程间通信请求。
  • 2.ActivityManagerService发现用来运行MyService组件的应用程序进程即为MyActivity组件所运行的应用程序进程,因此,它就直接通知应用程序进程将MyService启动起来。
  • 3.MyService组件启动起来后,ActivityManagerService就请求它返回一个Binder本地对象,以便MyActivity可以通过这个Binder本地对象来和MyService组件建立连接。
  • 4.ActivityManagerService将前面从MyService组件中获得的一个Binder本地对象发送给MyActivity组件。
  • 5.MyActivity组件获得了ActivityManagerService给它发送的Binder本地对象之后,就可以通过它来获得MyService组件的一个访问接口,MyActivity组件之后就可以通过这个访问接口来使用MyService组件所提供的服务,这就相当于将MyService绑定在了MyActivity中了。

那service在系统中绑定是如何的呢?
同样看下时序图:

客户端组件启动Server组件的过程:

  • 1.Client组件启动ActivityManagerService发送一个启动Server组件的进程间通信请求。
  • 2.ActivityManagerService发现用来运行Server组件的应用程序进程不存在,因此,它就会首先将Server组件的信息保存下来,接着再
    创建一个新的应用程序进程
  • 3.新的应用程序启动完成之后,就会向ActivityManagerService发送一个启动完成进程间通信请求,以便ActivityManagerServices可以继续执行启动Service组件的操作。
  • 4.ActitivtyManagerService将2中保存下来的Service组件信息发送级第2步创建的应用程序进程,以便它可以将Server组件启动起来。

第一时间获得博客更新提醒,以及更多android干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。

如果你觉得好,随手点赞,也是对笔者的肯定,也可以分享此公众号给你更多的人,原创不易

插件占坑,四大组件动态注册前奏(二) 系统Service的启动流程相关推荐

  1. Android 四大组件之——Acitivity(三) 深入了解Activity的启动流程

    上图为整个Activity的启动流程 接下来我们大概分析 在我们的Android系统中,应用程序是由Launcher这个应用启动起来的.当我们安装好应用程序之后,就会在Launcher的界面上生成一个 ...

  2. Android深入四大组件(五)Android8.0 根Activity启动过程(后篇)

    前言 在几个月前我写了Android深入四大组件(一)应用程序启动过程(前篇)和Android深入四大组件(一)应用程序启动过程(后篇)这两篇文章,它们都是基于Android 7.0,当我开始阅读An ...

  3. Android深入四大组件(六)Android8.0 根Activity启动过程(前篇)

    相关文章 Android深入四大组件系列 Android系统启动系列 Android应用程序进程系列 Android深入解析AMS系列 前言 在几个月前我写了Android深入四大组件(一)应用程序启 ...

  4. Android深入四大组件(七)Android8.0 根Activity启动过程(后篇)

    相关文章 Android深入四大组件系列 Android系统启动系列 Android应用程序进程系列 Android深入解析AMS系列 前言 在几个月前我写了Android深入四大组件(一)应用程序启 ...

  5. Android四大组件之ContentProvider(二)读取设备上的图片、音频和视频

    Android系统提供了MediaScanner,MediaProvider,MediaStore等接口,通过Content Provider的方式提供给用户.当设备开机或者有SD卡插拔等事件发生时, ...

  6. DroidPlugin代码分析(三) 占坑、动态注册

    接上篇,这一篇分析一下"占坑"部分.既然是占坑,先看一下DroidPlugin都占了哪些坑? 扫一眼AndroidManifest.xml可以发现,除了主进程意外,还注册了&quo ...

  7. Android深入四大组件(八)广播的注册、发送和接收过程

    前言 我们接着来学习Android四大组件中的BroadcastReceiver,广播主要就是分为注册.接收和发送过程.建议阅读此文前请先阅读Android深入理解四大组件系列的文章,知识重复的部分, ...

  8. java远程插件动态注册机制_Spring运行时动态注册bean的方法

    在spring运行时,动态的添加bean,dapeng框架在解析xml的字段时,使用到了动态注册,注册了一个实现了FactoryBean类! 定义一个没有被Spring管理的Controller pu ...

  9. 2021新型面试题-血虐面试官斩获字节跳动Offer!Android 精选版面试题级答案(Android+Java+算法+性能优化+四大组件...)

    前言 双非本科,自认为技术水平不差,8月从美图实习离职回学校,各种倒霉的事不断,到现在11月,为了找个好的环境复习,9月又在学校附近租了房,基本是没有面试通知就学不进去,前面由于过于自信,也没拿个保底 ...

  10. 亿点点概述Android基础必会的四五六【四大组件 五大存储 六大布局】

    Android 四大组件 五大存储 六大布局 1. Android四大组件 1.1 Activity 1.1.1 概念 1.1.2 生命周期 1.1.3 四种启动模式 1.1.4 三种跳转方式 1.2 ...

最新文章

  1. gps导航原理与应用_一文读懂角速度传感器(陀螺仪)的应用场景
  2. C语言 计算日期是当年的第几天
  3. 竞争神经网络与SOM神经网络及其在矿井突水水源判别的应用
  4. python实现部分实例
  5. 微信小程序---开通开发环境的理解
  6. 管理新语:一项工作如果一定要上,不要等准备好,立即上
  7. 软件用户手册(软件使用说明书)模板
  8. 易辅客栈-第16套从零学手游脚本实战
  9. cass坡度土方计算案例_四面放坡且坡度不同的工程土方,CASS怎么算?
  10. ESP8266/ESP32 +1.3“ or 0.96“ IIC OLED指针式时钟
  11. 斯坦福大学自然语言处理第七课“情感分析(Sentiment Analysis)”
  12. java 人脸检测 人脸抓拍
  13. 中文颜色名称与RGB颜色对照表
  14. 关于编程的自我介绍和规划。
  15. Atom 修改Atom快捷键 实测可行
  16. 个人收款平台 XorPay 对比 Payjs
  17. 互联网日报 | 6月24日 星期四 | 快手全球月活已达10亿;HarmonyOS 2首批正式版升级;微软市值突破2万亿美元...
  18. 基于tkinter库txt文件操作的Python界面化图书管理系统
  19. pytorch用多层感知机实现鸢尾花3分类(亲测可用)
  20. matlab for循环教程,Matlab for循环使用操作教程分享

热门文章

  1. 数学_最小二乘问题的求解
  2. karto探秘之slam_karto
  3. 3D目标检测论文汇总
  4. 超级干货 | 用万字文章总结25种正则化方法(值得收藏)
  5. Yann LeCun送你的春节大礼:免费学习全部2020春季深度学习课程
  6. java虚拟机学习笔记(五)---运行时的数据区域
  7. 时分多路数字电话基带传输系统
  8. 【漏洞复现】PHPmyadmin 4.8.1后台Getshell新姿势
  9. [Linux] - 网速测试命令
  10. 爬虫协程比线程爬取速度更快?