Android12 Acivity启动流程

本文详细分析了Android 12中Activity启动的源码调用链,从startActivity开始,经过Instrumentation、ActivityTaskManager、IActivityTaskManager接口、ActivityTaskManagerService、ApplicationThread等多个组件,最终到Activity的创建和启动。过程中涉及ServiceManager、Binder通信、反射等关键环节,揭示了Android系统启动Activity的内部机制。

本文基于Android12 master分支源码分析
调用链在更新安卓版本后就不一样了,所以没有记住它的必要。所以这篇文章一方面作为记录,另一方面也讲怎样在aosp中找到调用链。
如果你想跟着自己手动在AOSP中查调用链,需要fq访问codesearch网站
我们首先从startActivty开始,在AndroidStudio中不断地向上查调用链,这个过程在AndroidStudio中的源码就能查到,简单省略,最终能看到在Instrumentation.java中地这里,执行了启动方法.

public ActivityResult execStartActivity(
            Context who, IBinder contextThread, IBinder token, Activity target,
            Intent intent, int requestCode, Bundle options) {
   
   
            ...
            int result = ActivityTaskManager.getService().startActivity(whoThread,
                    who.getOpPackageName(), who.getAttributionTag(), intent,
                    intent.resolveTypeIfNeeded(who.getContentResolver()), token,
                    target != null ? target.mEmbeddedID : null, requestCode, 0, null, options);
            }

调用到ServiceManager.getService方法获取一个IActivityTaskManager 对象执行startActivity方法。
旧版本Android中这个方法获取到的是ActivityManagerService,现已经重构为ActivityTaskManager。

interface IActivityTaskManager {
   
   //包含startActivity方法
    int startActivity(in IApplicationThread caller, in String callingPackage,
            in String callingFeatureId, in Intent intent, in String resolvedType,
            in IBinder resultTo, in String resultWho, int requestCode,
            int flags, in ProfilerInfo profilerInfo, in Bundle options);}
 ------------------------------------------------
 public static IActivityTaskManager getService() {
   
   
        return IActivityTaskManagerSingleton.get();
    }
    
   private static final Singleton<IActivityTaskManager> IActivityTaskManagerSingleton =
            new Singleton<IActivityTaskManager>() {
   
   
                @Override
                protected IActivityTaskManager create() {
   
   
                    final IBinder b = ServiceManager.getService(Context.ACTIVITY_TASK_SERVICE);
 
### Android Studio 中 Activity 的功能与作用 ActivityAndroid 应用程序中的核心组件之一[^1],主要负责提供用户界面并与用户进行交互。每个 Android 应用程序至少包含一个 Activity,但通常会包含多个 Activity,以实现不同的功能模块。Activity 的生命周期由系统管理,开发者需要根据应用需求在不同生命周期阶段执行相应的操作。 #### 1. 提供用户界面 Activity 的主要功能是为用户提供一个可视化的界面,通过布局文件(XML 文件)定义界面元素,并通过 Java 或 Kotlin 代码控制这些元素的行为。例如,在以下代码中,`setContentView(R.layout.myactivity1)` 将指定的布局文件加载到 Activity 中[^2]。 ```java public class myActivity1 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.myactivity1); // 加载布局文件 } } ``` #### 2. 用户交互 Activity 不仅展示界面,还负责处理用户的输入事件,如点击、滑动等。通过绑定事件监听器,Activity 可以响应用户操作并执行相应的逻辑。 #### 3. 生命周期管理 Activity 具有明确的生命周期,包括 `onCreate()`、`onStart()`、`onResume()`、`onPause()`、`onStop()` 和 `onDestroy()` 等方法。开发者可以通过重写这些方法来控制 Activity 在不同状态下的行为[^1]。 #### 4. 数据传递 Activity 之间可以通过 Intent 进行数据传递。Intent 是 Android 中用于启动 Activity、Service 或发送广播的一种机制。例如,以下代码展示了如何通过 Intent 启动另一个 Activity 并传递数据: ```java Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("key", "value"); startActivity(intent); ``` #### 5. 多任务支持 Activity 支持多任务操作,用户可以在不同的 Activity 之间切换。系统会自动管理 Activity 的堆栈,确保用户返回时能够恢复到之前的状态。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值