Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android筆記之四種launchMode

Android筆記之四種launchMode

編輯:關於Android編程

一、先來了解Task

Task 顧名思義,任務,每一個Android應用在運行的時候,都會創建和維護一個屬於自己的任務,而事實上,Task是一個包含棧結構的容器,該棧通常叫回退棧,用來保存當前所有Android應用中已經創建的窗口對象,通常我們看到的界面就是處於回退棧棧頂的窗口對象。當我們打開新的一個界面,那麼之前的界面(窗口對象)就會壓入棧內,讓出棧頂位置給新來的界面(窗口對象);當關閉該窗口對象時,系統會首先將該對象彈出棧,並銷毀該對象。當棧裡最後一個窗口對象被彈出棧後,回退棧為空,這時候回退棧被銷毀,應用停止。(應該注意到,這時候,應用並沒有完全退出內存,它的部分資源如靜態變量還會在內存中停留很長時間。)

此外有一點需要注意的是,每一個應用都有一個獨一無二的task,當打開新的一個應用時,它的task出現在前台,顯示給用戶,而舊的task將會轉入後台,這時候系統會自動保存舊task窗口對象的狀態,等該task被重新切換到前台運行後,該窗口回復焦點的同時也會恢復所有的狀態,然而。必須指出一點,不要以為處於後台的task會一直停留在內存裡,等待你回來。當手機內存被耗盡,或者新打開一個APP需要大量內存的時候,你所以為會等你的舊task將會無情地被系統干掉,哪個task被停止的時間越久越先被銷毀。

二、四種啟動模式launchMode

Activity有四種加載模式:

  • standard
    • singleTop
    • singleTask
      • singleInstance

        設置的位置在AndroidManifest.xml文件中activity元素的android:launchMode屬性:

        模式

        具體描述

        standard

        launchMode的默認值,在新建Activity時默認不寫,就已經是該模式,每調用一個startActivity,系統就會新實例化一個窗口對象,回退棧裡就多一個該實例的窗口對象。除非是按back鍵或者在代碼裡調用finish()方法,否則一直存在直到應用停止。不管有沒有已存在的實例,都生成新的實例。

        singleTop

        如果窗口的實例剛好是在當前界面(即回退棧的棧頂),那麼系統將不再創建新的窗口對象(standard模式則不同,不管是不是棧頂都會新建),直接使用該窗口實例。這樣做的好處就是只要需要用的實例一直在界面上,回退棧裡就只有一個實例,要退出時按下一次就能直接退出(因為只有一個窗口對象),這個模式在NFC中使用特別合適。

        如果發現有對應的Activity實例正位於棧頂,則重復利用,不再生成新的實例。但是,注意一點,它只看棧頂,不看棧裡,如果棧頂沒有該實例,棧裡也有,它也依然會新建一個窗口對象的實例。

        singleTask

        這個模式比較強權和霸道,即如果發現有對應的Activity實例,則使此Activity實例之上的其他Activity實例統統出棧,使此Activity實例成為棧頂對象,顯示在當前界面,而不會新建該實例。如果該窗口實例不存在則會新建,並置於棧頂。

        singleInstance

        該模式更加獨斷專行,如果當前回退棧中有,則將它之前的實例對象全部清除出去,然後自己置於棧頂,如果當前回退棧沒有,它會新建一個回退棧,然後新建一個實例對象,並且不允許其他實例對象進來。該模式很少用,因為新建一個只用於一個實例對象的回退棧太費內存空間。且意義不大。

        上述文字比較枯燥,並且沒有具體的例子。沒寫例子的原因是因為有前輩已經寫了很詳細的分析實例了。如果你還不太懂,請看這篇博文。http://blog.csdn.net/liuhe688/article/details/6754323

        此外,上傳一個專門用來講述四種模式不同的例程。是《Android開發權威指南》裡的一個例子,大家可以運行看看是不是這樣。


        例程下載


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved