Android Activity四種加載方式

1 概述

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

  • standrad
  • singleTop
  • singleTask
  • singleInstance

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

2 standard

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

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的實例並放置於棧頂,此時棧示意圖以下:
在這裏插入圖片描述
而後點擊返回依次退棧.3d

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.xml

6 總結

一個表總結:對象

操做順序 standard singleTop singleTask singleInstance
初始狀態 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
First->First 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
First->Second 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
Second->First 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
First->Second 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述 在這裏插入圖片描述
相關文章
相關標籤/搜索