Activity的四種啟動(dòng)模式

2018-07-04 10:16 更新

standard

默認(rèn)啟動(dòng)模式. 每個(gè)發(fā)送的 Intent 都會(huì)創(chuàng)建一個(gè)新的 Activity, 并且將其放入任務(wù)棧棧頂, 而不管這個(gè) Activity 是否已經(jīng)存在. Activity 的啟動(dòng)三回調(diào)( onCreate()->onStart()->onResume() )都會(huì)執(zhí)行. 也就是說每次都創(chuàng)建一個(gè)新的實(shí)例.

singleTop

如果新 Activity 已經(jīng)位于任務(wù)棧的棧頂, 那么此 Activity 不會(huì)被重新創(chuàng)建, 所以它的啟動(dòng)三回調(diào)就不會(huì)執(zhí)行, 同時(shí) Activity 的 onNewIntent() 方法會(huì)被回調(diào). 如果 Activity 已經(jīng)存在卻不在棧頂, 那么作用和標(biāo)準(zhǔn)模式一樣, 一個(gè)新的 Activity 會(huì)被創(chuàng)建并放到棧頂.

在這個(gè)模式下, 我們必須同時(shí)在 onCreate() 和 onNewIntent() 兩個(gè)方法中處理好傳入的 Intent.

應(yīng)用場景

比如搜索功能. 當(dāng)用戶在搜索條中搜索完會(huì)跳轉(zhuǎn)到 SearchActivity 查看搜索結(jié)果. 通常, 我們?cè)诮Y(jié)果頁面的頂端也會(huì)放置一個(gè)同樣的搜索條, 這樣用戶就不需要回退就可以進(jìn)行相同的搜索.

如果是 standard 模式, 搜索十次就會(huì)在棧里創(chuàng)建了十個(gè) SearchActivity 實(shí)例, 同時(shí)用戶需要按十次回退鍵才能回到之前的頁面. 這明顯比較二.

如果是 singleTop 模式, 當(dāng)在搜索結(jié)果界面時(shí), SearchActivity 處在棧的頂端. 所以我們只需要發(fā)送 Intent 到已經(jīng)存在的 SearchActivity 實(shí)例, 更新頁面的結(jié)果就足夠了, 不需要?jiǎng)?chuàng)建新的 Activity. 同時(shí)只需要按一次回退就能回到之前的頁面.

singleTask

如果棧中任意位置已經(jīng)有一個(gè) Activity 實(shí)例, 那么這個(gè) Activity 就會(huì)被調(diào)到棧頂, 始終保持一個(gè)實(shí)例, 同時(shí)回調(diào) onNewIntent() , 并且 singleTask 會(huì)清理在當(dāng)前 Activity 上面的所有 Activity.

singleInstance

這個(gè)模式和 singleTask 很接近, 只會(huì)有一個(gè)實(shí)例存在. 不同點(diǎn)是持有這個(gè) Activity 的 Task 不能再有其他 Activity 的實(shí)例了.

如果從這個(gè) Activity 中啟動(dòng)另外一個(gè)不同的 Activity, 將會(huì)自動(dòng)創(chuàng)建一個(gè)新的 Task 來存放新的 Activity.

如果從一個(gè)已經(jīng)存在許多 Activity 的 Task 中調(diào)用 singleInstance Activity. 這個(gè)新 Activity 同樣會(huì)被放在一個(gè)新的 Task 中.

來源:


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)