1. 入口。
以前一直都说Activity的人口是onCreate方法。其实android上一个应用的入口,应该是ActivityThread。和普通的java类一样,入口是一个main方法。
public static final void main(String[] args) {
SamplingProfilerIntegration.start();
……
Looper.prepareMainLooper();
if (sMainThreadHandler == null) {
sMainThreadHandler = new Handler();
}
ActivityThread thread = new ActivityThread();
thread.attach(false);
……
Looper.loop();
……
thread.detach();
……
Slog.i(TAG, "Main thread of " + name + " is now exiting");
}
下面仔细分析一下这个main方法。
2.Looper.prepareMainLooper();
ActivityThread其实就是我们经常说的UI thread,也就是主线程。我们都知道主线程可以使用Handler进行异步通信,因为主线程中已经创建了Looper,而这个Looper就是在这里创建的。如果其他线程需要使用Handler通信,就要自己去创建Looper。
3. sMainThreadHandler = new Handler();
创建一个Handler。
4. ActivityThread thread = new ActivityThread();
创建ActivityThread 对象。
ActivityThread 有几个比较重要的成员变量,会在创建ActivityThread对象时初始化。
(1)final ApplicationThread mAppThread = new ApplicationThread();
ApplicationThread继承自ApplicationThreadNative, 而ApplicationThreadNative又继承自Binder并实现了IApplicationThread接口。IApplicationThread继承自IInterface。这是一个很明显的binder结构,用于于Ams通信。IApplicationThread接口定义了对一个程序(linux的进程)操作的接口。ApplicationThread通过binder与Ams通信,并将Ams的调用,通过下面的H类(也就是Hnalder)将消息发送到消息队列,然后进行相应的操作,入activity的start, stop。
(2)final H mH = new H();
private final class H extends Handler
mH负责处理ApplicationThread发送到消息队列的消息,例如:
public void handleMessage(Message msg) {
if (DEBUG_MESSAGES) Slog.v(TAG, ">>> handling: " + msg.what);
switch (msg.what) {
case LAUNCH_ACTIVITY: {
ActivityClientRecord r = (ActivityClientRecord)msg.obj;
r.packageInfo = getPackageInfoNoCheck(
r.activityInfo.applicationInfo);
handleLaunchActivity(r, null);
} break;
5. handleLaunchActivity(r, null);
从名字中就可以看出,这里就将进行启动activity的工作了。
方法中主要调用了这一句:
Activity a = performLaunchActivity(r, customIntent);
6. performLaunchActivity()
进行了一些初始化和赋值操作后,创建activity。
activity = mInstrumentation.newActivity(
cl, component.getClassName(), r.intent);
然后调用:
mInstrumentation.callActivityOnCreate(activity, r.state);
这一句就会调用到acitivity的onCreate方法了,就进入了大多数应用开发的入口了。
分享到:
相关推荐
1. **Activity启动流程概述** Activity的启动流程主要涉及`ActivityManagerService`(AMS)、`ApplicationThread`(Binder代理)和`Activity`自身。首先,应用通过调用`startActivity()`方法开启这一过程,然后该...
它主要的功能之一就是处理应用中的Activity启动请求。在`ActivityThread`中有几个关键的方法与Activity的生命周期密切相关: - **handleLaunchActivity**: 当一个新的Activity需要被启动时,`ActivityThread`会调用...
这里,`Instrumentation`类对象的`execStartActivity`函数被调用,标志着Activity启动流程的开始。 2. **跨进程通信**:`execStartActivity`通过Binder机制,将请求传递到系统服务端。`ActivityManagerNative`作为...
在Activity启动过程中,系统可能还会调用以下方法来执行具体的操作: - startActivity:启动一个新的Activity。 - startActivityForResult:启动一个新的Activity,并等待其返回结果。 - execStartActivity:执行...
- 冷启动涉及的主要过程:点击事件触发 -> 进程创建 -> Application初始化 -> ActivityThread加载 -> 主Activity的生命周期管理 -> UI渲染。 - 热启动则跳过进程创建和Application初始化,直接进入Activity的生命...
本文将从源码的角度对Activity的启动过程进行分析,介绍Activity的启动过程的源码解析。 一、Activity类 Activity是Android系统中一个核心组件,负责处理用户交互和显示UI。Activity类是所有Activity的基类,提供...
当新Activity启动后,原Activity的输入事件会被取消,且可能开始退出动画。如果`requestCode`不为-1,新启动的Activity会在完成时通过`onActivityResult`回调将结果返回给原Activity。 总结起来,`startActivity`...
对于源码深度理解,可以查看Android源码中关于Service的相关类,如ContextImpl、ServiceManager、ActivityThread等,这有助于更深入地了解Service的工作原理和系统如何管理Service。 7. **工具辅助** 使用Android...
文档"android-display分析.doc"主要探讨了Android显示系统的一些核心概念,包括Display对象的创建、Activity的启动机制,以及DisplayMetrics在其中的作用。让我们深入了解一下这些知识点。 首先,Display是Android...
本文将详细探讨Android Activity的生命周期,并通过源码分析和工具辅助来深化理解。 一、Activity生命周期概述 Activity的生命周期由创建、启动、运行、暂停、停止和销毁这6个状态构成。每个状态的变化都会触发特定...
这一方法实现了具体的Activity启动逻辑。 ##### ActivityManagerService.startProcessLocked 这里涉及到了新进程的创建和管理,是启动Launcher过程中不可或缺的一部分。 #### Process类管理创建activity进程 在...
当你启动一个Activity时,ActivityManagerNative会向ActivityThread发送消息,ActivityThread则根据消息内容调用相应生命周期方法。 博客“Activity生命周期源代码”可能详细解释了这些内部机制,并给出了实例代码...
本文将详细介绍 Android 系统从 SystemServer 开始的 Launcher 启动流程,并对其中的关键组件和服务进行分析。 概述 Android 系统启动流程可以分为两个阶段:第一个阶段是从 SystemServer 开始到 Launcher 的启动,...
接下来,`ActivityThread`通过`performLaunchActivity`方法启动指定的Activity。在这个过程中,系统会进行一系列的准备工作,如解析AndroidManifest.xml文件、创建Activity实例、执行生命周期方法(如`onCreate`),...
首先,我们需要了解Activity启动的基本流程。在Android API 28版本下,Activity的启动涉及两个进程:本地进程(即应用进程)和系统服务进程。当调用`startActivity(Intent intent)`时,启动流程如下: 1. Activity...
Android 应用程序进程启动过程是 Android 应用程序框架层创建的应用程序进程的入口函数 ActivityThread.main 在进程的初始化过程中实现的两个特点的分析。这些特点是进程的入口函数是 ActivityThread.main 和进程...
这样,我们可以在`startActivity()`调用前后执行额外的操作,例如检查权限、添加日志或替换Activity启动参数。 4. **权限与安全**:Hook技术虽然强大,但也有安全风险。不恰当的Hook可能会导致应用崩溃、隐私泄露...
例如,可以研究ActivityThread类中的handleCreateActivity()、handleStartActivity()等方法,了解Activity是如何被创建和启动的。 工具如Android Studio也提供了强大的调试功能。开发者可以在生命周期回调方法上...
AMS 启动流程源码分析 Android 操作系统的启动流程是一个复杂的过程,涉及到多个组件和服务的协作。AMS(Activity Manager Service)是 Android 中的核心组件,负责管理应用程序的生命周期、进程间通信、Intent ...
要分析Activity中的Window的创建过程就必须了解Activity的启动过程,详细的启动过程参考Activity的启动过程 。 Activity的启动过程很复杂, 最终会由ActivityThread中的performLaunchActivity()方法来完成整个启动...