標籤:
Activity棧主要用於管理Activity的切換。當使用Intent跳轉至某個目標Activity,需要根據目標Activity的載入模式來載入。
Activity一共有以下四種launchMode:
1.standard:預設,每次使用Intent跳轉到目標Activity時都建立一個新的執行個體。壞處是每次進入都要建立新的執行個體,執行OnCreate方法。
2.singleTop:如果要跳轉的目標Activity正好在task的頂部(說明當前肯定不在目標task裡,例如我在首頁,然後想使用Intent跳轉到InnoXYZ應用的首頁,那麼加入InnoXYZ首頁正好在InnoXYZ的task頂部,就直接跳轉而不會建立執行個體),那麼就直接跳轉過去而不會建立新的。(例子,當前在Home Screen, 收到一條首頁的推送,而此時task棧裡的task裡的Activity棧裡的最頂部正好就是首頁,那麼點擊推送就直接進入該執行個體而不會建立新的執行個體)
3.singleTask:會在一個新的task中產生這個執行個體,以後每次調用都會使用這個,不會去產生新的執行個體了。
4.singleInstance:是其所在棧的唯一activity,它會每次都被重用。
launchMode在多個Activity跳轉的過程中扮演著重要的角色,它可以決定是否產生新的Activity執行個體,是否重用已存在的Activity執行個體,是否和其他Activity執行個體公用一個task裡。這裡簡單介紹一下task的概念,task是一個具有棧結構的對象,一個task可以管理多個Activity,啟動一個應用,也就建立一個與之對應的task。
我們可以在AndroidManifest.xml配置<activity>的android:launchMode屬性為以上四種之一即可。
android:exported
在Activity中該屬性用來標示:當前Activity是否可以被另一個Application的組件啟動:true允許被啟動;false不允許被啟動。
android:exported 是Android中的四大組件 Activity,Service,Provider,Receiver 四大組件中都會有的一個屬性。
總體來說它的主要作用是:是否支援其它應用調用當前組件。
詳解Android開發中Activity的四種launchMode