天天看點

[Android]Android Activity 啟動模式詳解

一句話差別: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的,你說有關系嘛,當然了沒關系就是有關系咯,有關系就是沒關系咯,但是同時呢,這些啟動模式也相當的重要哇,這篇文章隻是适用于新盆友使用咯,當然老朋友也可以看看啊,提提意見啥的,大家一起進步,但願能幫助一些猿古人類吧,哈哈!

繼續閱讀