概述
深入理解Activity
学习内容地址:http://www.imooc.com/learn/413
与activity的相关的framework层介绍
ActivityThread
在ActivityThread的main中:
1、创建一个调用一个Looper.prepareMainLooper(),创建一个Looper对象,这就是我们activity的主线程。
2、创建ActivityThread对象,ActivityThread就是一个普通的java类。
3、调用thread.attach方法。主要是为了和ActivityManagerService进行交互通信。在里面通过ActivityManagerService的代理对象ActivityManagerNative.getDefault()获取代理对象和ActivityManagerService通信。代理对象通过传递ApplicationThread对象mAppThread进行通信。
ApplicationThread
ApplicationThread继承自ApplicationThreadNative(一个实现binder的子类)目的是和ActivityManagerService(AMS)通信。
所以ApplicationThread仅仅是和AMS通信的一个工具类。
activityClientRecord
是对activity的相关信息记录的一个描述类。包括了activity的parent,window,config等。
activityRecord
主要是AMS中所存储的activity的记录的一个类。和activityClientRecord数据结构类似。
Context
activity是什么和其他类的区别
activity和别的类不同的是他的生命周期由frameWork层统一地进行了管理(生命周期,binder通信)。
之前的ActivityThread就是控制我们activity的生命周期的回调。通过binder跨进程和AMS通信实现的。
activity的生命周期的方法是什么和什么时候回调
在ActivityThread中有一个名为H的handler对象专门负责处理相应的AMS发送过来的消息。
在处理activity生命周期中,有几个很重要的对象要介绍下:
Instrumentation
辅助AMS创建Application,管理Act各种生命周期方法的调用(如方法onstart,onpause,onresume等都是以该类为辅助打开的),启动Act。
ApplicationThreadNative
是AMS远程代理的对象。
H类
是一个handler类,为Activity处理AMS远程发送过来的消息。
Activity的oncreate
1、Activity的oncreate方法是通过instromentation.handleLaunchActivity调用的。
2、该方法中首先通过存储在activityClientRecord类中该activity相关信息的通过反射创建activity对象。
3、通过activity.attach方法将activity和创建的顶层的window进行关联,同时对activity的相关内容进行初始化。
4、Appliaction对象也是在这里创建的。Application有自己的context为contextimpl。在创建的时候和activity一样,只是通过的是applicationinfo中的信息反射创建的。最后将在通过instrumentation去调用oncreat。继续activity的创建之路。
5、在activity创建的过程中,每个activity都有对应的context,在context创建之后都会相互关联起来。
6、在activity的attach方法中,主要是创建其显示的window对象,同时初始化activity的相关的一些内容。
7、在创建window的时候,会将他和windowManager进行关联,同时将activity放入一个activitys的列表里面进行统一的管理。
8、最后通过instrumentation的oncreate去开始执行oncreate方法。
9、在window创建后,回调用他的setContent,为window设置显示内容。Window通过判断其内部是否有decorView从而决定是否新建一个继承自frameLayout的decorView。
Activity的onresume
1、 通过activityClientRecord去获取activity,然后调用act的performResume。和oncreat一样,最后也是通过instrumentation去调用resume的
2、 在resume的时候,首先去拿到window对象,然后去拿到绑定的windowManager对象(这个类继承自ViewManager,内部只有addView,removeView和UpdateView的方法)去管理View。
3、 而这里真正实现管理的对象是WindowManagerImpl对象里面的windowManagerGlobal。去对View实现添加删除修改更新。
4、 对于每个View来说他们都是通过ViewRootImpl进行管理的,当创建出来之后他们会进行一一绑定。ViewRootImpl中有一个W对象,专门去接收Wm发送过来的消息。对于View的绘制的相关操作都是由ViewRootImpl接手的。当然判断是否是在主线程绘制也由它接手。
5、 最后将View添加到décor中,再将décor添加到window中再将décor设置为可见就,同事是发送act的显示消息给AMS。
activity、window、windowManager三者之间的状态
activity主要是一个控制的结构负责生命周期管理和windowManager发送过来的屏幕事件处理。
Window即phoneWindow控制界面的显示。
windowManager与windowManagerService做整体交互
Activity的ondestroy
仅仅是将View和ViewRootImpl不进行关联,并将activityClientRocord移除,却并没有对acitivy进行销毁操作。
具体过程:
1、先拿到自己的windowManager对象,对window的ViewRootImpl进行移除。
2、context在activity建立的时候会添加进来,所以activity销毁时将context也移除。
3、在执行destroy方法前先要判断activity是否处于pause状态,没有的话则将activitypause之后在做后续操作。
4、去执行我们自己写的onDestroy方法。
5、最后将token移除。
思维导图地址:https://www.processon.com/view/link/5875950ae4b0858234882d8b
最后
以上就是高兴早晨为你收集整理的深入理解Activity与activity的相关的framework层介绍activity是什么和其他类的区别activity的生命周期的方法是什么和什么时候回调的全部内容,希望文章能够帮你解决深入理解Activity与activity的相关的framework层介绍activity是什么和其他类的区别activity的生命周期的方法是什么和什么时候回调所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复