FrameWork 之 Activity

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是什么 --環境 相關資源

本身是一個接口.

Paste_Image.png
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

Paste_Image.png

處理AMS跨線程通信的具體邏輯

Activity生命周期具體回調

Instrumentation

本質:負責打開Activity的生命周期方法/創建Application對象 /啟動Activity
for example:
startActivity();
startActivityForResult();最終都是調用此類
本質:輔助AMS管理Activity生命周期

ActivityManagerNative

本質:輔助AMS與客戶端跨線程交互(結合前文理解)

H類 H extends Handler

本質:處理AMS發送過來的具體消息 (看圖片)

框架層學習筆記,僅供參考,代碼為手打,錯誤之處煩請指正,歡迎交流 qq:11417998

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容