我眼中的Activity的工作过程

原创 2016年08月29日 15:44:11
        我们都知道平常在使用Activity的过程中,只需要调用Activity的startActivity方法,传入适当的参数就可以启动一个我们想要启动的Activity了,但是你知道这个过程中经历了些什么吗?今天我想从FrameWork层面解释下从系统启动到显示出我们的第一个Activity的整个过程,也算是对面试题:说一下一个Android APP从点击打开开始,是怎样展示在用户面前的回答了,我不打算从源码角度进行分析,只希望能够将整个逻辑流程捋清楚就可以啦;
        (1):首先,系统刚刚启动的时候加载的是Linux内核,在Linux内核加载完成之后会创建出来一个init进程,启动init进程解析init.rc文件首先会fork出一个叫ServerManager的子进程,该进程主要用于管理我们的系统服务,他内部存在一个server服务列表,这个列表中存储的就是那些已经注册的系统服务,随后init进程会fork出一个Zygote的子进程,Zygote进程是一个守护进程,之后,当我们的应用程序想要启动的时候,实际上是由Zygote来fork出子进程给我们的应用程序的,这就保证了我们的应用程序运行在单独的子进程中,即使一个应用程序奔溃也不会影响另一个应用程序的执行;
        (2):在Zygote进程启动之后,会通过ZygoteInit的main方法fork出一个SystemServer子进程,SystemServer进程在启动的时候会创建ActivityThread对象以及系统上下文,注意一点就是虽然ActivityThread里面带有Thread,但他仅仅是一个普通的final类而已,并没有继承Thread或者实现Runnable接口,在ActivityThread里面存在一个内部类ApplicationThread,虽然ApplicationThread里面带有Thread,同样他也没有继承Thread或者实现Runnable接口,他实际上是一个Binder类,接着在SystemServer的main方法里面会创建ServerThread对象(同样虽然ServerThread里面带有Thread,但他只是一个普通类),并且调用他的initAndLoop方法,在initAndLoop方法里面会初始化诸如ActivityManagerService等一系列系统级Service对象,并且调用ServerManager的addService方法,将这些Service服务注册到ServerManager里面,同时启动这些服务;到这里,系统进程的启动工作就结束了,之后,会开启系统Launcher程序来完成系统界面的加载与显示;
        (3):在我们点击应用程序的桌面图标的时候,App就由Launcher开始启动了,Launcher实际上是继承了Activity的,并且实现了点击、长点击等等监听器,在点击桌面图标的时候,实际上执行的是Launcher的onClick方法,在onClick里面会执行我们Activity的startActivitySafely方法,因为Launcher是继承自Activity的嘛,所以它里面的大多数方法都会辗转到Activity中去执行的,在startActivitySafely方法里面实际上执行的就是startActivity方法了,这个方法就是我们通常跳转Activity的时候调用的方法,这个方法里面会执行startActivityForResult方法,紧接着执行的是Instrumentation的execStartActivity方法,Instrumentation可以认为是一个大管家,每个Activity都持有一个Instrumentation对象的一个引用,但是整个进程中是只有一个Instrumentation的,AMS与ActivityThread之间诸如Activity的创建、暂停等的交互工作实际上是由Instrumentation具体操作的,在这里我们应该明白一点就是我们的ActivityManagerService是属于系统级服务的,而ActivityThread是用于管理应用程序的主线程执行的,而系统级服务和应用程序的ActivityThread是属于不同进程的,因此他们两者之间的交互是需要用到Binder通信的,而ActivityThread工作的真正执行者是Instrumentation,因此Instrumentation与AMS的交互是涉及到Binder通信的,也就是说Instrumentation的execStartActivity实际上是通过Binder与AMS进行通信的,在execStartActivity里面通过获得AMS在客户端的代理   ActivityManagerProxy,调用他的startActivity方法实际上最终执行到的就是AMS的startActivity方法,在AMS的startActivity方法中实际上通过ActivityStackSupervision与ActivityStack来交互操作完成Activity启动的,最终会执行到ApplicationThread的scheduleLaunchActivity方法来启动Activity,scheduleLaunchActivity会通过Handler来发送创建Activity的消息给主线程,也就是ActivityThread,而ActivityThread在接收到这个创建消息之后会调用他自己的handleLaunchActivity方法,这个方法会执行performLaunchActivity方法,在performLaunchActivity方法里面就会通过Instrumentation通过反射来创建一个Activity对象出来了,在创建完Activity之后就会调用Instrumentation的callActivityOnCreate方法来启动Activity,callActivityOnCreate实际上执行的是Activity的onCreate方法,进行一些必要的初始化操作;
版权声明:本文为博主原创文章,未经博主允许不得转载。

Activity的工作过程

(1)Android作为一个优秀的基于Linux的操作系统,其内部有许多值得我们学习和借鉴的地方。 首先Android系统启动的时候加载的是Linux内核,在Linux内核加载完成之后会创建出来一个...
  • nhgfd
  • nhgfd
  • 2017年02月19日 18:20
  • 539

android (三)、Activity工作原理

由Launcher启动一个新的应用程序时,launcher会调用startActivity来启动Activity。假设进程应经fork,ActivityThread已经创建过,Launcher通过Bi...
  • jiabailong
  • jiabailong
  • 2016年03月24日 16:39
  • 1170

彻底弄懂Activity四大启动模式

最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解。我觉得对某个知识点的理解必须要动手操作才能印象深刻,所以今天写一篇博文,结合案例理解Activity启动模式。由于之前看过“区长”的...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016年05月24日 16:04
  • 58866

Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)

一、什么是Activity?     简单的说:Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。在一个应用程序中通常由多个Activity构成,都会在Manifest.xml中指定一...
  • tangcheng_ok
  • tangcheng_ok
  • 2011年09月06日 23:44
  • 87926

Activity 的介绍和使用(一)

Activity是什么Activity是Android的四大组件之一。是用户操作的可视化界面;它为用户提供了一个完成操作指令的窗口。当我们创建完毕Activity之后,需要调用setContentVi...
  • litengit
  • litengit
  • 2016年04月05日 15:57
  • 5375

Activity工作流(2)-入门安装运行第一个例子

1. 初识Activiti1.1. 工作流与工作流引擎工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。...
  • qq_15969757
  • qq_15969757
  • 2017年05月24日 15:58
  • 6072

Activity

Activity 是Android 四大组件之一,用于展示界面 * Activity 中所有操作都与用户密切相关,是一个负责与用户交互的组件,它上面可以显示一些控件也可以监听并处理用户的事件。 ...
  • like_eat_apple
  • like_eat_apple
  • 2016年12月08日 22:52
  • 388

深入Activity

核心内容1、Activity数据交换 2、Activity中的任务栈 3、Activity查看任务 4、Activity启动模式Activity数据交换1、Activity之间的数据交换 传递基...
  • ilyluo
  • ilyluo
  • 2016年04月09日 18:34
  • 1004

基于N源码的Activity的启动过程分析

对于该主题的文章,网上泛滥,为了加深印象,最好还是自己跟一遍源码,这样对框架的认识以及对应用的控制都是很有帮助的。 推荐老罗的一些列文章: Android应用程序的Activity启动过程简要介绍和学...
  • yq6073025
  • yq6073025
  • 2016年09月22日 13:47
  • 1181

Android四大组件之Activity

生命周期    1. Activity的entire lifetime(全部的生命期)发生在调用onCreate()和调用onDestory()之间。    在onCreate()方法中执行全局...
  • Evan123mg
  • Evan123mg
  • 2016年10月19日 17:12
  • 939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我眼中的Activity的工作过程
举报原因:
原因补充:

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