Now you can Subscribe using RSS

Submit your Email

2016/09/04

Activity LaunchMode

asd

Activity 的啟動模式分為下列四種 standard、singleTop、singleTask、singleInstance 不同的啟動模式會影響 Acitvity 開啟狀態與產生的實例( Instance )、生命週期與使用者按下返回按鈕時所需回復的畫面


每開起一個 Activity 都會建立一個類似 Stack 的容器來存放開啟的 Activity ,因為 LaunchMode 設定不同會有不同的存放方式,這會影響到使用者按下手機上的返回鍵時所要回復的 Activity 畫面,且進入 Stack 容器裡面的 Activity 當按下手機上的 Back 時是依照後進先出的順序進行畫面的退回,一個Stack中可以含有多個 Activity Instance 且每個 Activity Instance 可以屬於不同個 Stack。

舉個例子說明一下

ex:啟動 APP 時在 A 畫面,按下 Button 時 Intent 到 B 畫面,再由 B 畫面上的 Button Intent 到 C 畫面,此時 Stack 裡面的堆疊情況是 CBA 最下層是 A 再來 B 最後才是 C 當按下 Back 時會先回到 B 再回到 A  最後回到開啟此 APP 前的畫面。

下列是模擬圖




standard:標準模式,如果沒有特別設定系統預設就是Standard模式,每次啟動 Activity 都會建立一個新的實例且調用 onCreate > onStart > onResume ,且每次建立的實例都屬於同一個 Stack 中。

singleTop:單一至頂模式,此模式類似於 standard 的標準模式差別在於如果目前 Stack 最上層的 singleTop Mode 的 Activity 畫面再次 Intent 切換,這時不會重新調用 onCreate > onStart > onResume 而是調用 onNewIntent > onStart > onResume 重複使用已經存在 Stack 最上層的 Activity  ,假設 Intnet 不是 Stack 最上層 Activity 時則正常調用 onCreate > onStart > onResume 產生新的實例於 Stack 中。

狀況1 :因為系統資源不足而被銷毀的 Activity 就不會調用 onNewIntent 而是重新調用  onCreate > onStart > onResume 。

0 意見:

張貼留言

Coprights @ 2016, Blogger Templates Designed By Templateism | Templatelib