在Android开发中,Activity是应用程序的一个重要组成部分。了解Android启动过程以及Activity的启动源码对于理解Android应用程序的启动流程是非常重要的。在本文中,我们将深入了解Android中Activity的启动过程,并从源码级别进行分析。
1. Android启动过程概述
当我们启动一个Android应用程序时,系统会自动创建一个新的进程,并在该进程中启动一个名为"ActivityThread"的线程。ActivityThread负责协调整个应用程序的启动过程,并负责管理所有的Activity实例。
Android的启动过程可以分为主线程阶段和Activity启动阶段。在主线程阶段中,ActivityThread会执行一系列的初始化操作,然后创建一个Application实例。接下来,ActivityThread会将应用程序的主Activity添加到Activity栈中,并将其启动起来。
2. Activity启动源码分析
2.1 主线程阶段
在主线程阶段中,ActivityThread主要负责执行一些初始化操作,并启动应用程序的主Activity。下面是主线程阶段的关键源码分析:
public class ActivityThread extends ClientTransactionHandler {
public static void main(String[] args) {
ActivityThread thread = new ActivityThread();
thread.attach(false);
if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}
// 执行初始化操作
Looper.loop();
}
private void attach(boolean system) {
if (!system) {
Looper.prepareMainLooper();
// 创建Application实例
mInitialApplication = AppGlobals.getInitialApplication();
...
}
}
}
从上述源码中可以看到,在主线程阶段,ActivityThread首先会执行一些初始化操作。然后,通过调用Looper.loop()
来开启主线程的消息循环。
2.2 Activity启动阶段
在Activity启动阶段,ActivityThread会创建并启动应用程序的主Activity。下面是Activity启动阶段的关键源码分析:
public class ActivityThread extends ClientTransactionHandler {
public static void main(String[] args) {
...
// 创建并启动应用程序的主Activity
activity.performLaunchActivity();
}
private void performLaunchActivity() {
ActivityClientRecord r = new ActivityClientRecord();
...
// 创建Activity对象
Activity a = performCreateActivity(r);
// 加入Activity栈,并将其置为前台
r.setActivity(a);
mActivities.put(r.token, r);
...
try {
// 调用Activity的生命周期方法
a.onCreate(r.state);
} catch (Exception e) {
...
}
}
private Activity performCreateActivity(ActivityClientRecord r) {
...
ClassLoader cl = r.packageInfo.getClassLoader();
// 创建Activity实例
Activity activity = null;
try {
activity = Instrumentation.newActivity(
cl, component.getClassName(), r.intent);
...
} catch (Exception e) {
...
}
// 设置Activity的Application和Context
activity.setApplication(r.packageInfo.getApplication());
activity.setBaseContext(r.packageInfo.getApplication().getBaseContext());
return activity;
}
}
从上述源码中可以看到,在Activity启动阶段,ActivityThread首先会调用performLaunchActivity()
方法创建并启动应用程序的主Activity。然后,通过调用performCreateActivity()
方法来创建Activity对象。接下来,ActivityThread会将Activity加入Activity栈,并将其置为前台。最后,ActivityThread会依次调用Activity的生命周期方法(如onCreate()
)。
总结
本文从源码级别分析了Android的启动过程以及Activity的启动过程。了解Android的启动过程对于开发者来说非常重要,可以帮助我们更深入地理解Android应用程序的运行机制。希望本文能给正在学习Android开发的同学们带来一些帮助。
本文来自极简博客,作者:时光隧道喵,转载请注明原文链接:Android 启动过程:Activity 启动源码分析 (ActivityThread -> Activity、主线程阶段)