Activity深度剖析

本文详细剖析了Android中Activity的工作原理,从ActivityThread的启动到与AMS(ActivityManagerServices)的交互,再到ApplicationThread的通信角色。重点讲解了Activity生命周期管理、Context实现、窗口管理以及Activity、Window和WindowManager之间的关系。在生命周期中,强调了onCreate()和onResume()的执行流程,以及如何通过Instrumentation和Handler进行控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在了解Activity底层原理之前,首先要知道Framework层类的介绍

ActivityThread:不是一个线程,是一个app进程启动过程中在主线程当中的一个方法中开启了ActivityThread。启动之后会调用main方法,然后创建:

Looper.prepareMainLooper():主线程的loop对象
ActivityThread thread = new ActivityThread()
thread.attach(false):和AMS进行通信
Looper.loop()

等ActivityThread启动完成后会通知AMS(ActivityManagerServices),在交互的过程中就会拿到:

IActivityManager mgr = ActivityManagerNative.getDefault();远程代理对象
mgr.attachApplication(mAppThread);mAppThread是具体的bind对象的实例

ApplicationThread是用来和ActivityManagerServices进行通信的一个具体的实现类。在ActivityThread中就进行创建了ApplicationThread了

ActivityClientRecord是Activity的一个描述类,有ActivityInfo对Activity的信息的描述
ActivityRecord:主要是ActivityManagerServices所存储的一个Activity的一个记录底栈
Context:上下文环境,它是一个接口。通过具体的实现类来定义Activity,services,application

  • Activity的生命周期的方法是通过Instrumentation来进行管理的,并且它还可以创建Application。启动Activity,起到一个辅助的作用。
  • ActivityManagerNative是远程服务器的一个代理类对象,也是辅助进行Activity进行通信的。
  • H handler是用来进行发送消息

Activity的onCreate()的创建是通过handleLaunchActivity调用performLaunchActivity,在performLaunchActivity里面首先通过classloader加载相关的Activity对象,然后创建Application对象,通过ContextImpl。之后调用activity.attach(),对Activity进行初始化相关的操作。有ContextImp,theme,Configuration,title进行初始化。然后和window对象进行关联。其实还是调用的是activity.attach,给window对象进行赋值,设置windowManager。最后创建一个帧布局,decodeView,是整个顶层布局的对象。然后回调自己的一些方法。mInstrumentation.callActivityOnCreate(activity,r.state)就创建出来了,onCreate()方法。

onResume():ViewManager对View进行管理,两个实现类,一个WindowManagerImpl,WindowManagerGlobal。还有ViewRootImpl对View的管理。通过activity.makeVisible()进行展示onResume()状态。

activity、window、windowManager三者之间有什么关系。
activity作为控制的层,负责整体的生命周期的管理,并接收我们windowManger发送过来的一些键盘的处理。而window就是我们的手机window,主要控制界面的显示和添加。但是所有界面的管理还是依靠我们的windowManager进行管理的。它可以与我们的远程的windowMangerServices进行交互。

onStop(),onDestroy().

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值