前言:新启动一个activity分为两种情况,第一种是在Launcher的桌面点击icon图标启动一个新的应用,第二种是在应用启动的情况下从OneActivity->TwoActivity

其实两种情况殊途同归,最后都是调用的相同方法。下面我们主要总结一下第一种情况。

引用 https://blog.csdn.net/qian520ao/article/details/78156214 中的整体流程如下:

  1. Launcher通知AMS启动淘宝APP的MainActivity,也就是清单文件设置启动的Activity。
  2. AMS记录要启动的Activity信息,并且通知Launcher进入pause状态。
  3. Launcher进入pause状态后,通知AMS已经paused了,可以启动淘宝了。
  4. 淘宝app未开启过,所以AMS启动新的进程,并且在新进程中创建ActivityThread对象,执行其中的main函数方法。
  5. 淘宝app主线程启动完毕后通知AMS,并传入applicationThread以便通讯。
  6. AMS通知淘宝绑定Application并启动MainActivity。
  7. 淘宝启动MainActivitiy,并且创建和关联Context,最后调用onCreate方法。

  

  AMS是独立于Launcher和app进程的,因此他们之间的沟通是通过Binder来实现的,我们通过context.getSystemServer()可以获取到AMS的服务代理,但是只能从app发送消息到AMS,如果AMS想要通知app,就要使用applicationThread这个binder对象了,applicationThread的绑定是在ActivityThread的main方法中进行的。

  Launcher通过amp来通知AMS启动一个新的activity,这个新的activity对象就保存在AMS中这端,如果新的app还没有启动进程,ams就会调用zygote copy一个进程出来,并且在这个进程中调用ActivityThread.main()方法来启动一个主线程,在main中,会绑定一个applicationThread的binder对象,之后AMS会通过applicationThread来通知activityThread来启动activity,在ActivityThread中又会调用H来发送消息,最后会回调到instrumentation(仪表盘)中来进行activity的创建,onCreate等生命周期等。

 

Activity的启动流程的更多相关文章

  1. Android进阶系列之源码分析Activity的启动流程

    美女镇楼,辟邪! 源码,是一个程序猿前进路上一个大的而又不得不去翻越障碍,我讨厌源码,看着一大堆.5000多行,要看完得啥时候去了啊.不过做安卓的总有这一天,自从踏上这条不归路,我就认命了.好吧,我慢 ...

  2. 插件占坑,四大组件动态注册前奏(一) 系统Activity的启动流程

    转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52190050 前言:为什么要了解系统Activity,Service,,BroadCa ...

  3. Activity的启动流程分析

    Activity是Android应用程序的四大组件之中的一个,负责管理Android应用程序的用户界面,一般一个应用程序中包括非常多个Activity,他们可能执行在一个进程中.也可能执行在不同的进程 ...

  4. 从Activity的启动流程理解Binder

    简述 关于Activity启动流程和Binder的文章很多,大多数是分开来讲的,本文将二者结合起来,着重分析启动流程中跨进程方面的细节,其实,启动流程看似调用繁多,主要是复杂在Activity栈管理等 ...

  5. Cocos2d-x3.3RC0的Android编译Activity启动流程分析

    本文将从引擎源代码Jni分析Cocos2d-x3.3RC0的Android Activity的启动流程,以下是具体分析. 1.引擎源代码Jni.部分Java层和C++层代码分析 watermark/2 ...

  6. 《转》深入理解Activity启动流程(四)–Activity Task的调度算法

    本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...

  7. 《转》深入理解Activity启动流程(三)–Activity启动的详细流程2

    本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...

  8. 《转》深入理解Activity启动流程(三)–Activity启动的详细流程1

    本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(一)--Activity启 ...

  9. 《转》深入理解Activity启动流程(二)–Activity启动相关类的类图

    本文原创作者:Cloud Chou. 出处:本文链接 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 在介绍Activity的详细启动流程之前,先为大家介绍Act ...

随机推荐

  1. Oracle数据库备份及还原

    Oracle数据库备份 1:找到Oracle安装路径我的就是默认C盘  C:\app\wdjqc\admin\orcl\adump 2:执行文件:back.bat 文件内容如下: @echo off ...

  2. [Swift]LeetCode269. 外星人词典 $ Alien Dictionary

    There is a new alien language which uses the latin alphabet. However, the order among letters are un ...

  3. [Swift]LeetCode333. 最大的二分搜索子树 $ Largest BST Subtree

    Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest mea ...

  4. [Swift]LeetCode435. 无重叠区间 | Non-overlapping Intervals

    Given a collection of intervals, find the minimum number of intervals you need to remove to make the ...

  5. mac连接windows远程桌面及文件复制

    最近更换mac办公,但由于之前是用windows,所以很多文件项目之类的东西都还在windows电脑中,一次都传到mac上又会比较占内存,并且使用率也不高,感觉不划算.但每次想用的时候,在从windo ...

  6. 简单实现 C# 与 Javascript的兼容

    本文章介绍下自己这刚实现的一个c#与js交互的插件.需求来源于一次与朋友的讨论.主要对话如下: 朋友:最近我想模拟一些数据,来测试我现在写的接口,但手工编写这些测试数据太麻烦了 本人:是啊,.net能 ...

  7. 『字典树 trie』

    字典树 (trie) 字典树,又名\(trie\)树,是一种用于实现字符串快速检索的树形数据结构.核心思想为利用若干字符串的公共前缀来节约储存空间以及实现快速检索. \(trie\)树可以在\(O(( ...

  8. centos7正确关机重启

    linux主要用于服务器领域,而在服务器上执行一项服务是永无止境的,除非遇到特殊情况,否则不会关机.和Windows不同,在linux系统下,很多进程是在后台执行的.在屏幕背后,可能有很多人同时在工作 ...

  9. LeetCode专题-Python实现之第7题:Reverse Integer

    导航页-LeetCode专题-Python实现 相关代码已经上传到github:https://github.com/exploitht/leetcode-python 文中代码为了不动官网提供的初始 ...

  10. 菜鸟系列docker——docker基本概念(1)

    docker基本概念 1.准备 这里先介绍容器技术,后续再介绍docker.docker是容器的一种,除docker以外,还存在coreos.不过在当前趋势下容器和docker基本上可以划为等号了. ...