一句話區別:standard,需要即new物件,不管物件是否存在,single模式可以複用物件。執行模式與執行緒和 程式均沒有什麼關係,與使用場景有關係。
最近有群裡的朋友問我 Activity的四種啟動模式分別是什麼意思? 當初因為專案比較忙,草草的解釋了下, Api文件中說的也只是一般,在這裡就小記一下吧,以便有更多的朋友對Activity啟動模式瞭解深刻一點。度孃的時候 就可以找得到不需要在 問人了。如果不瞭解的話,簡單的幾句也說不清晰。
Activity 四種啟動模式,分別為:standard 、singleTop、singleTask、singleInstance。
一 :
standard 模式:這個就沒有什麼好說的了,Android預設Activity啟動的模式 就是 standard,如果有3個 Activity,Act1,Act2,Act3, 如果從Act1 啟動到Act2 ,在啟動到Act3,那麼Android 的任務棧(task stack)分別為 Act1、Act2、Act3,Act3 在棧頂,如果此時按手機返回鍵,則需要返回3次才能返回到桌面(假設是從桌面啟動的demo),任務棧分銷燬掉 Act3,Act2,最後Act1 。
二 :
singleTop模式:
實驗效果:
singleTop模式:該啟動模式和standard模式相差不多,任務棧分配也很相似,如:現有 act1,act 2,在act2 清單檔案中配置 android:launchMode="singleTop" ,其他都是預設standard 模式, 若從桌面啟動該實驗demo,從act 1,到act2 ,那麼任務棧則分配為,act1,act2,此時該任務棧和 standard 模式任務棧分配則完全相同,接下來則說明不同的地方,如果在act2 介面中 啟動 到act1, 此時的 任務棧 情況則為 act1,act2,act1,在由act1 啟動到act2,在啟動到act2,進行多次啟動,(在act2介面)任務棧的情況則為,act1,act2,act1,act2,棧頂的act2 則不會重新建立,則會複用act2 該 Activit, 依次類推。
理論知識:
singleTop,如果任務棧的棧頂元素是要被啟用的元件,不會建立新的Activity放在任務棧,而是會複用棧頂的Activity。 如果發現棧頂的元素不是要啟用的Activity,就會建立新的Activity 放置到任務棧裡面
singleTop模式應用場景 :
App程式中(或瀏覽器中)儲存的書籤,假如使用者看到一個介面儲存自己喜歡的標籤,假如要儲存10個,這個時候使用者在返回鍵的時候,則會返回10次才能返回到App應用中, Android下singleTop 則解決該問題。
三
singleTask 模式 :
實驗效果 相差不大,實驗內容就不多說了,自己可以寫個小demo,兩個Activity,每個Activiy 有兩個button,可以相互啟動 打日誌去動手檢視,會理解更加深刻,可以參照著 SingleTop模式去實驗,以下只是講解下 和SingleTop的區別:
區別如下:(理論知識)
SingleTask 操作模式,一般和singleTop操作模式類似,如果他發現任務棧裡面已經有了要啟動的這個Activity,他會清空這個Activity所在的任務棧上面的所有Activiy,然後直接複用這個已經存在的Activity 。
應用場景:
如果一個App中,有一個功能需要載入網頁內容 ,開啟一個 browserActiviy現在網頁內容,則記憶體開銷非常大,首先要初始化webkit /c++ 嵌入式瀏覽器核心broweractivity 配置了singleTask,空間換時間,使用該模式可以節省記憶體開銷。
四 :
singleinstance 模式 :
直接理論知識吧”:
singleInstance操作模式會新開啟一個任務棧,跟其他普通Activity不是 同一個任務棧,比較牛,他的模式流程是 首先要新開啟一個新的任務棧把要啟用的Activity放置到新的 任務棧裡,這個任務棧裡面只有且 只有一個例項,也比較極端吧。說比較極端也跟他的應用場景有關係。
應用場景 :
App各種詞典,向有道詞典,什麼金山詞典,說極端是因為不想被放置到同一個任務棧裡面,它是全域性的系統程式應用,達到節省記憶體的使用目的。
說這些到底有神馬用呢,因為啊,大部分公司面試的時候 都好問這一口,問什麼鳥問題呢,大致是要問你,Android的啟動模式跟程式 有沒有關係,你說有什麼關係嘞,鳥毛的關係都木有,程式是程式, 任務棧是管理Activity的,你說有關係嘛,當然了沒關係就是有關係咯,有關係就是沒關係咯,但是同時呢,這些啟動模式也相當的重要哇,這篇文章只是適用於新盆友使用咯,當然老朋友也可以看看啊,提提意見啥的,大家一起進步,但願能幫助一些猿古人類吧,哈哈!