原始碼分析結論

2022-08-12 01:48:13 字數 1732 閱讀 7776

由以上2.1~2.6對原始碼的分析,可以得到以下結論:

3.1 activity、window和view的依賴關係:

3.2 setcontentview()執行的序列圖:

activity展示的其實是phonewindow上的內容。那麼其實 setcontentview 實際上是呼叫的 phonwwindow的setcontentview。可以看出window是做為中介者連線了activity和view。

3.3.activity的檢視框架結構(

3.4 解釋一下decorview的布局資源的載入邏輯,features變數是怎麼來的:

再觀察generatelaout()的實現如下:

protected viewgroup generatelayout(decorview decor) else if ((features & ((1 << feature_left_icon) | (1 << feature_right_icon))) != 0) else

removefeature(feature_action_bar);

} ...

mdecor.startchanging();

mdecor.onresourcesloaded(mlayoutinflater, layoutresource);

viewgroup contentparent = (viewgroup)findviewbyid(id_android_content);

...}12

3456

78910

1112

1314

1516

1718

1920

2122

2324

那麼,mlocalfeatures的值是怎麼來的?直接搜尋mlocalfeatures被賦值的地方,發現是通過getdefaultfeatures()方法拿到的,但是這個只是拿到預設的features值,這是不夠的。反推,上面都是位操作,我們要搜尋mfeatures和mlocalfeaures的位操作地方了,原始碼裡面用乙個int值代表一堆標記位的事情也不少了。果然,發現,是在phonwwindow的requestfeature()中設定的標記位:

public boolean requestfeature(int featureid)

final int features = getfeatures();

final int newfeatures = features | (1 << featureid);

if ((newfeatures & (1 << feature_custom_title)) != 0 &&

(newfeatures & ~custom_title_compatible_features) != 0)

...//window的requestfeature()會將featureid通過按位或運算記錄到mfeatures變數中

return super.requestfeature(featureid);}1

2345

6789

1011

1213

1415

這樣也能解釋的通了,為什麼在activity中使用requestfeature()要在setcontentview()前呼叫了,以為這個值是給activity的decorview選擇載入那種樣式的布局檔案用的。如果在setcontentview之後呼叫,這個時候phonewindow::generatelayout(decorview)已經執行完成了,並不會生效。

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...

思科VPP原始碼分析(dpo機制原始碼分析)

vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...

redux原始碼分析(三) 原始碼部分

下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...