W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
默認(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í)例.
如果新 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.
比如搜索功能. 當(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í)只需要按一次回退就能回到之前的頁面.
如果棧中任意位置已經(jīng)有一個(gè) Activity 實(shí)例, 那么這個(gè) Activity 就會(huì)被調(diào)到棧頂, 始終保持一個(gè)實(shí)例, 同時(shí)回調(diào) onNewIntent() , 并且 singleTask 會(huì)清理在當(dāng)前 Activity 上面的所有 Activity.
這個(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 中.
來源:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: