Activity深度剖析

来源:互联网 发布:敷面膜知乎 编辑:程序博客网 时间:2024/06/05 16:49

在了解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().

原创粉丝点击