`
dengzhangtao
  • 浏览: 681420 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ActivityThread-activity启动分析

阅读更多
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方法了,就进入了大多数应用开发的入口了。
0
0
分享到:
评论

相关推荐

    Activity 启动过程源码+分析过程

    1. **Activity启动流程概述** Activity的启动流程主要涉及`ActivityManagerService`(AMS)、`ApplicationThread`(Binder代理)和`Activity`自身。首先,应用通过调用`startActivity()`方法开启这一过程,然后该...

    android启动以及activity生命周期分析

    它主要的功能之一就是处理应用中的Activity启动请求。在`ActivityThread`中有几个关键的方法与Activity的生命周期密切相关: - **handleLaunchActivity**: 当一个新的Activity需要被启动时,`ActivityThread`会调用...

    Activity启动流程

    这里,`Instrumentation`类对象的`execStartActivity`函数被调用,标志着Activity启动流程的开始。 2. **跨进程通信**:`execStartActivity`通过Binder机制,将请求传递到系统服务端。`ActivityManagerNative`作为...

    Activity_boot_process_analysis

    在Activity启动过程中,系统可能还会调用以下方法来执行具体的操作: - startActivity:启动一个新的Activity。 - startActivityForResult:启动一个新的Activity,并等待其返回结果。 - execStartActivity:执行...

    深入探索Android启动速度优化1

    - 冷启动涉及的主要过程:点击事件触发 -> 进程创建 -> Application初始化 -> ActivityThread加载 -> 主Activity的生命周期管理 -> UI渲染。 - 热启动则跳过进程创建和Application初始化,直接进入Activity的生命...

    Android Activity的启动过程源码解析

    本文将从源码的角度对Activity的启动过程进行分析,介绍Activity的启动过程的源码解析。 一、Activity类 Activity是Android系统中一个核心组件,负责处理用户交互和显示UI。Activity类是所有Activity的基类,提供...

    Android AOSP 6.0.1 常规startActivity启动流程分析

    当新Activity启动后,原Activity的输入事件会被取消,且可能开始退出动画。如果`requestCode`不为-1,新启动的Activity会在完成时通过`onActivityResult`回调将结果返回给原Activity。 总结起来,`startActivity`...

    android Service 与Activity绑定

    对于源码深度理解,可以查看Android源码中关于Service的相关类,如ContextImpl、ServiceManager、ActivityThread等,这有助于更深入地了解Service的工作原理和系统如何管理Service。 7. **工具辅助** 使用Android...

    android-display分析.doc

    文档"android-display分析.doc"主要探讨了Android显示系统的一些核心概念,包括Display对象的创建、Activity的启动机制,以及DisplayMetrics在其中的作用。让我们深入了解一下这些知识点。 首先,Display是Android...

    android Activity生命周期

    本文将详细探讨Android Activity的生命周期,并通过源码分析和工具辅助来深化理解。 一、Activity生命周期概述 Activity的生命周期由创建、启动、运行、暂停、停止和销毁这6个状态构成。每个状态的变化都会触发特定...

    android系统从systemserver开始的launcher启动详细流程

    这一方法实现了具体的Activity启动逻辑。 ##### ActivityManagerService.startProcessLocked 这里涉及到了新进程的创建和管理,是启动Launcher过程中不可或缺的一部分。 #### Process类管理创建activity进程 在...

    Activity生命周期源代码

    当你启动一个Activity时,ActivityManagerNative会向ActivityThread发送消息,ActivityThread则根据消息内容调用相应生命周期方法。 博客“Activity生命周期源代码”可能详细解释了这些内部机制,并给出了实例代码...

    android系统从systemserver开始的launcher启动详细流程.doc

    本文将详细介绍 Android 系统从 SystemServer 开始的 Launcher 启动流程,并对其中的关键组件和服务进行分析。 概述 Android 系统启动流程可以分为两个阶段:第一个阶段是从 SystemServer 开始到 Launcher 的启动,...

    Android应用程序启动过程源代码分析

    接下来,`ActivityThread`通过`performLaunchActivity`方法启动指定的Activity。在这个过程中,系统会进行一系列的准备工作,如解析AndroidManifest.xml文件、创建Activity实例、执行生命周期方法(如`onCreate`),...

    Android常用组件深入解析1

    首先,我们需要了解Activity启动的基本流程。在Android API 28版本下,Activity的启动涉及两个进程:本地进程(即应用进程)和系统服务进程。当调用`startActivity(Intent intent)`时,启动流程如下: 1. Activity...

    Android应用程序进程启动过程的源代码分析.pdf

    Android 应用程序进程启动过程是 Android 应用程序框架层创建的应用程序进程的入口函数 ActivityThread.main 在进程的初始化过程中实现的两个特点的分析。这些特点是进程的入口函数是 ActivityThread.main 和进程...

    Hook StartActivity Demo

    这样,我们可以在`startActivity()`调用前后执行额外的操作,例如检查权限、添加日志或替换Activity启动参数。 4. **权限与安全**:Hook技术虽然强大,但也有安全风险。不恰当的Hook可能会导致应用崩溃、隐私泄露...

    Android Activity 生命周期(lifecycle)的研究

    例如,可以研究ActivityThread类中的handleCreateActivity()、handleStartActivity()等方法,了解Activity是如何被创建和启动的。 工具如Android Studio也提供了强大的调试功能。开发者可以在生命周期回调方法上...

    AMS启动流程源码分析

    AMS 启动流程源码分析 Android 操作系统的启动流程是一个复杂的过程,涉及到多个组件和服务的协作。AMS(Activity Manager Service)是 Android 中的核心组件,负责管理应用程序的生命周期、进程间通信、Intent ...

    Activity的Window对象创建过程

    要分析Activity中的Window的创建过程就必须了解Activity的启动过程,详细的启动过程参考Activity的启动过程 。 Activity的启动过程很复杂, 最终会由ActivityThread中的performLaunchActivity()方法来完成整个启动...

Global site tag (gtag.js) - Google Analytics