Android Activity四種加載方式

1 概述

Android中的Activity共有四種加載方式,可以在AndroidManifest.xml中對應的activity的android:launchMode中指定,四種方式如下:

  • standrad
  • singleTop
  • singleTask
  • singleInstance

其中,standard是默認的加載方式,singleTop是棧頂單例模式,singleTask是Task內單例模式,singleInstance是全局單例模式,下面一一進行說明.

2 standard

standard是默認模式,每次通過這種模式啓動時,都會爲Activity創建一個新的實例,並將這個新的實例添加到棧頂,每次按返回鍵就會一直出棧,處於棧頂的實例就算用戶看到的界面.
下面測試一下,新建一個Activity與一個Intent,加上一個Button與startActivity:
在這裏插入圖片描述
加上調試信息以及設置好logcat過濾後,測試:
在這裏插入圖片描述
可以看到每次點擊按鈕都是一個新的實例,置於Task棧頂,示意圖如下:
在這裏插入圖片描述
然後,每次返回,棧頂的Activity出棧,直到棧爲空.

3 singleTop

singleTop允許一個Activity實例化多個對象,與standard唯一的不同就算,當將要啓動的Activity位於棧頂時,不會創建新的實例,而是直接複用已有實例.
另外,如果要啓動的Activity沒有位於棧頂,系統會創建新的實例,並加載到棧頂.
下面使用兩個Activity測試一下,增加一個按鈕和事件綁定,同時修改AndroidManifest.xml的android:launchMode爲singleTop:
在這裏插入圖片描述
這裏FirstActivity用的是singleTop,SecondActivity是standard.
在這裏插入圖片描述
一開始點擊First Activity沒反應,因爲此時First Activity位於棧頂,然後點擊了兩次Second,創建了兩個Second Activity實例,然後再次點擊First,此時FirstActivity沒有位於棧頂,因此新建First Activity的實例並放置於棧頂,此時棧示意圖如下:
在這裏插入圖片描述
然後點擊返回依次退棧.

4 singleTask

singleTask表示同一個Task內只有一個實例,當準備實例一個Activitty時,會查看棧中有沒有這個Activity的實例對象,如果不存在,就創建一個實例,並放置於棧頂,如果已存在,則會移除此實例上面的所有實例移出棧,使目標實例位於棧頂.
下面來測試一下,修改FirstActivity的launchMode爲singleTask,SecondActivity不變:
在這裏插入圖片描述
在這裏插入圖片描述
首先進入First Activity,然後開啓了四個Second Activity,此時的棧如下:
在這裏插入圖片描述
然後點擊First的按鈕後,上面的四個Second Activity全部出棧:
在這裏插入圖片描述
因此上面的圖會看到連續有四個destroy.

5 singleInstance

singleInstance是會使用一個全新的Task棧來存放該Activity實例,也就是說,Activity獨佔一個Task棧.下面把First Activity改成singleInstance,Second Activity不變:
在這裏插入圖片描述
在這裏插入圖片描述
一開始在Task id爲587的Task棧創建First Activity的一個實例,然後在Task id爲588的Task棧創建了三個Second Activity實例,示意圖如下:
在這裏插入圖片描述
退棧時,首先在當前Activity所在的Task棧進行退棧操作,而不是按照進棧的順序進行退棧,即先把當前Task出棧完成,再出棧其他Task.因此會先出棧First Activity,然後再出棧三個Second Activity.

6 總結

一個表總結:

操作順序 standard singleTop singleTask singleInstance
初始狀態 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
First->First 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
First->Second 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
Second->First 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
First->Second 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章