Android点击图标启动过程

原创 2018年04月17日 14:47:16

点击应用图标后会去启动应用的LauncherActivity,如果LancerActivity所在的进程没有创建,还会创建新进程,整体的流程就是一个Activity的启动流程。先上一个流程图:


整个流程涉及的主要角色有:


  • Instrumentation: 监控应用与系统相关的交互行为。

  • AMS:组件管理调度中心,什么都不干,但是什么都管。

  • ActivityStarter:Activity启动的控制器,处理Intent与Flag对Activity启动的影响,具体说来有:1 寻找符合启动条件的Activity,如果有多个,让用户选择;2 校验启动参数的合法性;3 返回int参数,代表Activity是否启动成功。

  • ActivityStackSupervisior:这个类的作用你从它的名字就可以看出来,它用来管理任务栈。

  • ActivityStack:用来管理任务栈里的Activity。

  • ActivityThread:最终干活的人,是ActivityThread的内部类,Activity、Service、BroadcastReceiver的启动、切换、调度等各种操作都在这个类里完成。


注:这里单独提一下ActivityStackSupervisior,这是高版本才有的类,它用来管理多个ActivityStack,早期的版本只有一个ActivityStack对应着手机屏幕,后来高版本支持多屏以后,就有了多个ActivityStack,于是就引入了ActivityStackSupervisior用来管理多个ActivityStack。


整个流程主要涉及四个进程:


  • 调用者进程,如果是在桌面启动应用就是Launcher应用进程。

  • ActivityManagerService等所在的System Server进程,该进程主要运行着系统服务组件。

  • Zygote进程,该进程主要用来fork新进程。

  • 新启动的应用进程,该进程就是用来承载应用运行的进程了,它也是应用的主线程(新创建的进程就是主线程),处理组件生命周期、界面绘制等相关事情。


有了以上的理解,整个流程可以概括如下:


  1. 点击桌面应用图标,Launcher进程将启动Activity(MainActivity)的请求以Binder的方式发送给了AMS。

  2. AMS接收到启动请求后,交付ActivityStarter处理Intent和Flag等信息,然后再交给ActivityStackSupervisior/ActivityStack
    处理Activity进栈相关流程。同时以Socket方式请求Zygote进程fork新进程。

  3. Zygote接收到新进程创建请求后fork出新进程。

  4. 在新进程里创建ActivityThread对象,新创建的进程就是应用的主线程,在主线程里开启Looper消息循环,开始处理创建Activity。

  5. ActivityThread利用ClassLoader去加载Activity、创建Activity实例,并回调Activity的onCreate()方法。这样便完成了Activity的启动。

android点击了桌面图标后,启动过程

最后总结一下:用户在Launcher程序里点击应用图标时,会通知ActivityManagerService启动应用的默认Activity,ActivityManagerService发现这个应用还未...
  • zhangcanyan
  • zhangcanyan
  • 2017-06-08 22:21:26
  • 427

Android应用程序的启动过程源码解析—点击图标启动过程

在Android系统中,有两种操作会引发Activity的启动,一种用户点击应用程序图标时,Launcher会为我们启动应用程序的主Activity;应用程序的默认Activity启动起来后,它又可以...
  • qianhaifeng2012
  • qianhaifeng2012
  • 2016-07-27 16:05:38
  • 2775

Android面试准备 第三天 第六例 Android应用启动原理

参考:http://blog.csdn.net/lmj623565791/article/details/24015867 8、 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去,二...
  • qq_32736689
  • qq_32736689
  • 2016-04-04 09:16:34
  • 351

分析点击android桌面app图标启动应用程序的过程

Android应用程序的启动过程. 点击Launcher的界面app图标,启动应用程序. startActivity()过程...
  • hehe26
  • hehe26
  • 2016-05-20 11:01:40
  • 5826

一篇文章看明白 Android 从点击应用图标到界面显示的过程

Android - Activity 启动过程 概述 从点击桌面应用图标到应用显示的过程我们再熟悉不过了,下面我们来分析下这个过程都做了什么。 本文主要对以下问题分析: Activity...
  • freekiteyu
  • freekiteyu
  • 2018-02-12 17:40:41
  • 398

详解安卓从图表icon点击到APP启动界面加载流程

首先要明确一点:在Android系统中,应用程序是由Launcher启动起来的,其实,Launcher本身也是一个应用程序,其它的应用程序安装后,就会Launcher的界面上出现一个相应的图标, 点击...
  • qq_25047355
  • qq_25047355
  • 2017-02-16 16:59:48
  • 648

点击桌面图标Activity启动流程分析 - 基于Android5.0源码

Activity启动有两种方式: 1,通过点击桌面的图标来启动一个应用,进而会启动一个Activity。 2,直接在一个Activity或者Service中通过startActivity来启动一个Ac...
  • book_karlzhouzhi
  • book_karlzhouzhi
  • 2015-09-28 11:42:05
  • 1567

Android点击图标重新启动问题

项目中的小问题:发现应用打包安装后按home键切换到后台后,点击应用图标又重新打开了一个,并没有回到原来的界面解决方法: 步骤1: 删除第一个Activity的启动模式,或者改为“standard...
  • jianiuqi
  • jianiuqi
  • 2017-01-05 11:24:12
  • 2807

寻找windows程序的启动过程,就是从点击程序图标开始起,程序是怎样运行的?

到处搜索!!!!Windows应用程序的启动过程 操作系统实际上并不调用你编写的进入点函数。它调用的是C/C++ run-time startup function。该函数负责对C/C++ run-t...
  • woshijishukuang
  • woshijishukuang
  • 2007-06-07 09:58:00
  • 822
收藏助手
不良信息举报
您举报文章:Android点击图标启动过程
举报原因:
原因补充:

(最多只允许输入30个字)