Activity的四種啟動模式

2018-07-04 10:16 更新

standard

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

singleTop

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

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

應(yīng)用場景

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

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

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

singleTask

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

singleInstance

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

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

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

來源:


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號