Android 四種launchMode及疑問


之前對於四種模式的理解僅限於理論和一兩個簡單的測試(singleTop和singleTask)

今天腦袋抽風想都實際測一下,暈,測到 singleInstance杯具了

請對四種模式熟悉的朋友直接跳到文章底部,幫忙看下singleInstance的問題,謝謝

 

未標明launchMode的Activity都是默認啟動模式

1,standard

每次都會新建一個Activity實例

 

2,singleTask

棧空間簡易示意:A -- B -- C

 最后用startActivity(intent)從C跳到A后,由於棧空間已經存在A的實例,A上面的Activity B和C出棧(即onDestroy銷毀),A置於棧頂

如果A中重寫了onNewIntent(...)方法,會同時接到C跳A的intent數據

 

3,singTop

棧空間簡易示意:A -- B -- C

最后用startActivity(intent)從C跳到A后,即使棧控件已經存在A的實例,Android系統也會重新創建一個A的實例並且置於棧頂,當然重寫的onNewIntent(...)方法也不會接到intent數據, 變成:

 

4,singleInstance(代碼跳轉邏輯:A -- B -- C -- A -- B -- C .....)

1,起始Activity非singleInstance (實際跳轉順序:A -- B -- C -- A -- B -- C .....)

 

A,C位於同一棧中,taskId相同, B在另一個棧中,與他們taskId不同,此棧在B未被銷毀前只能有B一個Activity(B在創建之后,onNewIntent(...)也可以接到其他Activity跳轉的intent數據),整個過程中,B只創建了一次,A與C每次都創建一個實例

2,起始Activity為singleInstance(實際跳轉順序:A -- B -- C -- A -- C -- A -- C .....)

代碼中第一種情況相同,但實際跳轉順序卻不同,

第一次A -- B -- C 實際跳轉完成之后,當從C回到A(A在創建之后,onNewIntent(...)也可以接到其他Activity跳轉的intent數據)后,再從A跳B時,卻跳到了C頁面,依次循環,整個過程中,B只是在一開始創建時出現了一次,之后從A都是直接跳C,A當然是單實例的,但是C也只創建了一次,相當於是單實例

多次跳轉按物理返回鍵時:

如果當前頁面是A,則A銷毀,出現C,接着C銷毀,出現B,B銷毀,應用程序結束

如果當前頁面是C,則C銷毀,出現B,接着B銷毀,出現A,A銷毀,應用程序結束

返回鍵的實際跳轉情況屬於正常,因為A的taskId, 與B,C不同,不在同一棧中

 

但singleInstance的第2中情況,第一次A--B--C--A跳完之后,為啥從A卻進入了C並且是之前的實例C,並不是想象中的新創建一個Activity B的實例 ?

 

求指教哈,謝謝...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM