Activity 與普通類 有什么區(qū)別?
Activity生命周期本質(zhì)
Activity在AMS中的處理邏輯(Activity Manager Service)
ActivityThread是什么?
ActivityThread 是運(yùn)行在 Activity主線程中的一個(gè)普通的java類.本身不是一個(gè)線程
在主線程方法中運(yùn)行---->調(diào)用ActivityThread main()方法
(消息隊(duì)列準(zhǔn)備, 啟動(dòng))
ActivityThread 源碼分析
main()
Looper.prepareMainLooper();//準(zhǔn)備消息隊(duì)列
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);//創(chuàng)建一個(gè)消息隊(duì)列
}
}
//可以看出這一步主要是創(chuàng)建一個(gè)消息隊(duì)列
Looper.loop()
開(kāi)始循環(huán)處理消息
Thread.attach
主要處理和AMS的交互,通信
private void attach(boolean system){
//ActivityManagerNative是AMS的遠(yuǎn)程代理對(duì)象,因?yàn)锳MS在一個(gè)單獨(dú)的線程當(dāng)中 代理模式?
final IActivityManger mgr= ActivityManagerNative.getDefault();
try{
mgr.attachApplication(mAppThread);//ApplictionThread類 調(diào)用遠(yuǎn)程binder文件 傳輸數(shù)據(jù)
}catch(){}
}
ApplicationThread
private class ApplicationThread extends ApplicationThreadNative{
//往下看下繼承的類
}
public abstract class ApplicationThreadNative extends Binder implements IApplication
//和AMS 通信的一個(gè) Binder的具體實(shí)現(xiàn)類
處理具體的邏輯,在ActivityThread中初始化
ActivityClientRecord
定義Activity的描述的記錄,配置信息,Window等等等等..
Context是什么 --環(huán)境 相關(guān)資源
本身是一個(gè)接口.
Activity extends ContextThemeWrapper //Activity是Context的一個(gè)實(shí)現(xiàn)類
public abstract class Context{
//定義了一些 Acitity所需資源/方法
}
ContextWrapper extends Context{ //具體實(shí)現(xiàn)
Context mBase;
public ContextWrapper(Context base){//傳進(jìn)來(lái)mbase
mbase = base;
}
//for example
@override
public Resources getResources(){
return mBase.getResources();
}
}
//mbase 是Context的具體實(shí)現(xiàn)類
class ContextImp extends Context{
}
Activity與其他類有什么不同
控制界面的顯示,由FrameWork統(tǒng)一處理和管理. 本質(zhì)與其他類相同同
Activity 生命周期
ActivityThread 控制Activity生命周期一些方法回調(diào),具體回調(diào)由AMS跨線程通信回調(diào)(結(jié)合前文理解)
ActivityThread中的一個(gè)成員變量H
處理AMS跨線程通信的具體邏輯
Activity生命周期具體回調(diào)
Instrumentation
本質(zhì):負(fù)責(zé)打開(kāi)Activity的生命周期方法/創(chuàng)建Application對(duì)象 /啟動(dòng)Activity
for example:
startActivity();
startActivityForResult();最終都是調(diào)用此類
本質(zhì):輔助AMS管理Activity生命周期
ActivityManagerNative
本質(zhì):輔助AMS與客戶端跨線程交互(結(jié)合前文理解)
H類 H extends Handler
本質(zhì):處理AMS發(fā)送過(guò)來(lái)的具體消息 (看圖片)
框架層學(xué)習(xí)筆記,僅供參考,代碼為手打,錯(cuò)誤之處煩請(qǐng)指正,歡迎交流 qq:11417998