Android 四種launchMode

來源:互聯網
上載者:User

之前對於四種模式的理解僅限於理論和一兩個簡單的測試(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不同,不在同一棧中

轉自:http://www.cnblogs.com/youjun/archive/2012/06/05/2535534.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.