Activity 与普通类 有什么区别?
Activity生命周期本质
Activity在AMS中的处理逻辑(Activity Manager Service)
ActivityThread是什么?
ActivityThread 是运行在 Activity主线程中的一个普通的java类.本身不是一个线程
在主线程方法中运行---->调用ActivityThread main()方法
(消息队列准备, 启动)
ActivityThread 源码分析
main()
Looper.prepareMainLooper();//准备消息队列
public static void prepareMainLooper(){
prepare(false);
:
:
:
.......
}
private static void prepare(boolean quitAllowed){
if(sThreadLocal.get()!=null){
throw new RuntimeException("Only one Looper may be created per Thread");
sThreadLocal.set(new Looper(quitAllowed);//创建一个消息队列
}
}
//可以看出这一步主要是创建一个消息队列
Looper.loop()
开始循环处理消息
Thread.attach
主要处理和AMS的交互,通信
private void attach(boolean system){
//ActivityManagerNative是AMS的远程代理对象,因为AMS在一个单独的线程当中 代理模式?
final IActivityManger mgr= ActivityManagerNative.getDefault();
try{
mgr.attachApplication(mAppThread);//ApplictionThread类 调用远程binder文件 传输数据
}catch(){}
}
ApplicationThread
private class ApplicationThread extends ApplicationThreadNative{
//往下看下继承的类
}
public abstract class ApplicationThreadNative extends Binder implements IApplication
//和AMS 通信的一个 Binder的具体实现类
处理具体的逻辑,在ActivityThread中初始化
ActivityClientRecord
定义Activity的描述的记录,配置信息,Window等等等等..
Context是什么 --环境 相关资源
本身是一个接口.
Activity extends ContextThemeWrapper //Activity是Context的一个实现类
public abstract class Context{
//定义了一些 Acitity所需资源/方法
}
ContextWrapper extends Context{ //具体实现
Context mBase;
public ContextWrapper(Context base){//传进来mbase
mbase = base;
}
//for example
@override
public Resources getResources(){
return mBase.getResources();
}
}
//mbase 是Context的具体实现类
class ContextImp extends Context{
}
Activity与其他类有什么不同
控制界面的显示,由FrameWork统一处理和管理. 本质与其他类相同同
Activity 生命周期
ActivityThread 控制Activity生命周期一些方法回调,具体回调由AMS跨线程通信回调(结合前文理解)
ActivityThread中的一个成员变量H
处理AMS跨线程通信的具体逻辑
Activity生命周期具体回调
Instrumentation
本质:负责打开Activity的生命周期方法/创建Application对象 /启动Activity
for example:
startActivity();
startActivityForResult();最终都是调用此类
本质:辅助AMS管理Activity生命周期
ActivityManagerNative
本质:辅助AMS与客户端跨线程交互(结合前文理解)
H类 H extends Handler
本质:处理AMS发送过来的具体消息 (看图片)
框架层学习笔记,仅供参考,代码为手打,错误之处烦请指正,欢迎交流 qq:11417998