編輯:關於Android編程
本文分析講述了Android編程之四種Activity加載模式。分享給大家供大家參考,具體如下:
Activity狀態
一般認為Activity有以下四種狀態:
① 活動的:當一個Activity在棧頂,它是可視的、有焦點、可接受用戶輸入的。Android試圖盡最大可能保持它活動狀態,殺死其它Activity來確保當前活動Activity有足夠的資源可使用。當另外一個Activity被激活,這個將會被暫停。
② 暫停:在很多情況下,你的Activity可視但是它沒有焦點,換句話說它被暫停了。有可能原因是一個透明或者非全屏的Activity被激活。
當被暫停,一個Activity仍會當成活動狀態,只不過是不可以接受用戶輸入。在極特殊的情況下,Android將會殺死一個暫停的Activity來為活動的Activity提供充足的資源。當一個Activity變為完全隱藏,它將會變成停止。
③ 停止:當一個Activity不是可視的,它“停止”了。這個Activity將仍然在內存中保存它所有的狀態和會員信息。盡管如此,當其它地方需要內存時,它將是最有可能被釋放資源的。當一個Activity停止後,一個很重要的步驟是要保存數據和當前UI狀態。一旦一個Activity退出或關閉了,它將變為待用狀態。
④ 待用: 在一個Activity被殺死後和被裝在前,它是待用狀態的。待用Acitivity被移除Activity棧,並且需要在顯示和可用之前重新啟動它。
activity的四種加載模式
在android的多activity開發中,activity之間的跳轉可能需要有多種方式,有時是普通的生成一個新實例,有時希望跳轉到原來某個activity實例,而不是生成大量的重復的activity。加載模式便是決定以哪種方式啟動一個跳轉到原來某個Activity實例。
在android裡,有4種activity的啟動模式,分別為:
standard: 標准模式,一調用startActivity()方法就會產生一個新的實例。
singleTop: 如果已經有一個實例位於Activity棧的頂部時,就不產生新的實例,而只是調用Activity中的newInstance()方法。如果不位於棧頂,會產生一個新的實例。
singleTask: 會在一個新的task中產生這個實例,以後每次調用都會使用這個,不會去產生新的實例了。
singleInstance: 這個跟singleTask基本上是一樣,只有一個區別:在這個模式下的Activity實例所處的task中,只能有這個activity實例,不能有其他的實例。
singleTask: singleTask模式和後面的singleInstance模式都是只創建一個實例的。在這種模式下,無論跳轉的對象是不是位於棧頂的activity,程序都不會生成一個新的實例(當然前提是棧裡面已經有這個實例)。我覺得這種模式相當有用。。在以後的多activity開發中, 經常會因為跳轉的關系導致同個頁面生成多個實例,這個在用戶體驗上始終有點不好,而如果你將對應的activity聲明為 singleTask 模式,這種問題將不復存在。不過前陣子好像又看過有人說一般不要將除開始頁面的其他頁面設置為 singleTask 模式。。原因暫時不明,哪位知道的可以請教下。
singleInstance: 看網上的解釋好像都比較復雜。剛開始也沒怎麼明白這種模式,只知道它用的也不多。後來仔細看了網上的解釋,稍微有些懂了。就按我的理解解釋下。設置為 singleInstance 模式的 activity 將獨占一個task(感覺task可以理解為進程),獨占一個task的activity與其說是activity,倒不如說是一個應用,這個應用與其他activity是獨立的,它有自己的上下文activity。拿一個例子來說明吧:
現在有以下三個activity: Act1、Act2、Act3,其中Acti2 為 singleInstance 模式。它們之間的跳轉關系為: Act1 -- Act2 -- Act3 ,現在在Act3中按下返回鍵,由於Act2位於一個獨立的task中,它不屬於Act3的上下文activity,所以此時將直接返回到Act1。這就是singleInstance模式,不知道解釋清楚了沒。
這些啟動模式可以在功能清單文件AndroidManifest.xml中進行設置,中的launchMode屬性。
什麼是Task
當我們需要一個Activity可以啟動另一個Activity,可能另外一個Activity是定義在不同應用程序中的Activity。
簡單來說,一個Task就是用戶體驗上的一個“應用”。
它將相關的Activity組合在一起,以stack的方式管理(就是前面提到的Activity Stack),這就是Task。
在Android平台上可以將task簡單的理解為幽多個Activity共同協作完成某項應用,而不管Activity具體屬於哪個Application,
Task通過Application launcher、Home screen的快捷方式或者 由 “Recent Tasks”(長時間按住Home鍵)最近使用過的Task記錄中啟動。
希望本文所述對大家Android程序設計有所幫助。
我們首先從一個簡單的例子開始分析 button.setOnClickListener(new View.OnClickListener() { @
前言現在的APP大部分需要接入支付功能,而支付的主流就是微信支付和支付寶支付,網上關於微信支付和支付支付資料很多,但是這些資料隨著官方的變動可能變得毫無用處,所以我建議直
手機用一段時間特別卡,就要去刷機,但是又不想去售後,只有自己在網上找刷機大師刷了。那刷機大師怎麼刷機呢,現在告訴大家刷機大師刷機方法。前提准備1、下載安裝刷
上一篇文章中,簡單介紹了一下android數據庫的一些基本概念,那麼從本節開始,就實戰一下Android數據庫的創建和升級。 上文中,也介紹了,SQLiteOpenHel