今天把Activity全部内容精简一遍,activity最后一篇!
Activity本质和内部机制
与Activity相关的Framework层类
ActivityThread本质上不是一个线程,是一个java类,ActivityThread是所在主线程中的一个类,它的启动是调用main方法,其中内部有几个重点方法:
Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();
thread.attach(false);
Looper.loop()
ActivityThread的main()中,首先调用Looper.prepareMainLooper();然后调用ActivityThread()方法,但事实上这个方法并没有继承什么,是一个普通的方法,最重要的是attach()方法,这个方法主要与ActivityManagerService进行交互,首先调用ActivityManagerNative对象,这是一个远程代理接口,以获取远程代理对象。之后调用attachApplication(),这个也是对Bundle传输数据。
ActivityThread启动完成后如何通知AMS呢?主要的方法有:
IActivityManager mgr = ActivityManagerNative.getDefault();
mgr.attachApplication(mAppThread);
下面来看ApplicationThread,这是一个很关键的类,它是继承自ApplicationThreadNative类,ApplicationThreadNative类是一个Binder的子类,说明ApplicationThread需要与远程端进行通信,即与ActivityManagerService进行通信,通信的过程封装成一个Binder对象。
ActivityClientRecord是客户端Activity的一个描述的类,是对客户端的描述,
Context是一个接口,Activity其实是Context的一个子类。
Activity的生命周期的回调:
Instrumentation用于辅助创建Application, 对生命周期的管理,启动Activity。
ActivityManagerNative用于与远程Service进行数据交互
H handle也是与远程数据交互相关的类,调用了,handleLaunchActivity, performLaunchActivity。 classLoader加载相关Activity,Application对象创立,之后,activity.attach()
额,源码看的心力憔悴,认输,这次就先这样吧,等我酝酿一段时间再说吧……尴尬ing(口吐白沫中……)