1.activitystacksupervisor
它是乙個計算類,所有關於activityrecord,taskrecord,activitystack的操作都是在這裡面進行;
①來看這句**:
activityrecord sourcerecord = msupervisor.isinanystacklocked(resultto);
其中,resultto是ibinder型別,msupervisor就是activitystacksupervisor,看下activitystacksupervisor.isinanystacklocked()的內部實現:
activityrecord isinanystacklocked(ibinder token) }}
return null;
}
activitydisplay是什麼,它內部維護著乙個arraylist型別的mstacks,mstacks儲存著所有的activitystack;
關於 stack.isinstacklocked(token)的**在activitystack的描述裡面;
2.activitystack
①activitystack中有個mtaskhistory:arraylistmtaskhistory = new arraylist<>();
mtaskhistory 維護著手機中所有的taskrecorder;
②isinstacklocked函式:
activityrecord isinstacklocked(ibinder token)
點評:通過傳進來的token尋找到相應的activityrecord;
關於activityrecord.fortokenlocked(token)的**在activityrecord的描述裡面;
3.activityrecorder
①activityrecorder儲存著關於activity的所有資訊,比如taskrecorder,activitystack等;
每個activityrecorder都有自己所屬的棧taskrecorder,activityrecorde被儲存在taskrecorder.mactivities中;
②fortokenlocked()函式
public static activityrecord fortokenlocked(ibinder token) catch (classcastexception e)
}
看到這裡,就得仔細地分析下了:
token是activityrecord的內部類,**如下:
private final weakreferenceweakactivity;
private final string name;
token(activityrecord activity, intent intent)
private static activityrecord tokentoactivityrecordlocked(token token)
activityrecord r = token.weakactivity.get();
if (r == null || r.getstack() == null)
return r;
}@override
public string tostring()
@override
public string getname() }
可以看到,通過乙個ibinder型別的token,就可以獲取到相應的activityrecord ,那token與activityrecord是如何進行繫結的呢?
我們知道,在呼叫activity.startactivity時會呼叫下面這個方法:
instrumentation.activityresult ar = minstrumentation.execstartactivity(this,其中有個mtoken,它的型別是ibinder;這裡的這個mtoken是activity啟動者的mtoken,並不是被啟動者的;
mtoken在attach()方法中被賦值的;mtoken到底是啥呢,它就是對應的是activityrecorder.token;
當ams與activity進行繫結的時候,會建立乙個token物件,這個token物件就包含著activityrecord,每乙個activity都有乙個token,所以,根據token物件找到的activityrecord也是唯一的;
資料結構 1
線性結構 線性表,棧,佇列,串。線性結構特點 結構中的資料元素之間存在一對一的線性關係。線性表 線性表 最簡單 最基本 最常用的資料結構。操作不受限定。順序表 用順序儲存方式的線性表叫順序表。線性表的順序儲存方式 在記憶體中用一塊位址連續的空間一次存放線性表的資料元素。特點 表中相鄰的資料元素在記憶...
資料結構 1
資料結構是研究非數值計算的程式設計問題中計算機的操作物件以及它們之間的關係和操作的一門課程。具體地說,資料結構指的是資料元素之間的邏輯結構 儲存結構以其資料的抽象運算,即按某種邏輯關係組織起來的一組資料,再按一定的儲存表示方式把它們儲存在計算機的儲存器中,並在這些資料上定義乙個運算的集合.資料結構 ...
資料結構 1
1.基本資料組織和資料處理方法 2.資料結構的邏輯特性和儲存結構設計 演算法設計 基本資料結構 線性表,陣列,棧,樹,佇列,二叉樹,串,圖 3.資料如何表示 選擇合適的資料結構 資料運算如何實現 資料運算如何高效實現 4.資料結構基本概念,基本原理和基本方法 練習 優化 5.資料 所有能夠輸入到計算...