2011年12月19日 星期一

Android - activity : launchMode(4) - singleInstance介紹

singleInstance和前面介紹的singleTask很類似,差別在於不同的task。比如今天有2支apk,分別為apk1和 apk2,當apk1先startActivity一個activityA時,如果按下home key利用apk2去startActivity呼叫activityA時,系統就會找到剛才的activityA,而不會產生一個新的實體。這樣可以確 保整個系統在運作的期間,都只會有唯一的activityA。如果是singleTask的話,apk1和 apk2則會有各自的activityA,因為apk1和apk2是在不同的task裡面。

請把AndroidManifest.xml的A2進行調整為
<activity android:name=".A2" android:label="@string/app_name" android:launchMode="singleInstance"/>

執行程式後,按順序A1 -> A3 -> A2 -> A1 ->A3 -> A2去啟動各activity,結果如下




































由A3到A2時,taskID已經不一樣了!




















由A2到A3時,taskID又回到28



















由A3回到A2時,直接跳到task29的A2



















請注意,現在taskID28中的A1其實有2個,而A3也有2個。請在A2的畫面下,按Back Key會發現退回到task28的第2個A3(在頂層),看看hashcode的歷史資料即可證明。



















再繼續按下消失的順序為A3 -> A1 -> A3 -> A1。注意剛才A2已經消失過了,所以不可能再消失一次喔!

沒有留言:

張貼留言