編輯:關於Android編程
一、先來了解Task
Task 顧名思義,任務,每一個Android應用在運行的時候,都會創建和維護一個屬於自己的任務,而事實上,Task是一個包含棧結構的容器,該棧通常叫回退棧,用來保存當前所有Android應用中已經創建的窗口對象,通常我們看到的界面就是處於回退棧棧頂的窗口對象。當我們打開新的一個界面,那麼之前的界面(窗口對象)就會壓入棧內,讓出棧頂位置給新來的界面(窗口對象);當關閉該窗口對象時,系統會首先將該對象彈出棧,並銷毀該對象。當棧裡最後一個窗口對象被彈出棧後,回退棧為空,這時候回退棧被銷毀,應用停止。(應該注意到,這時候,應用並沒有完全退出內存,它的部分資源如靜態變量還會在內存中停留很長時間。)
此外有一點需要注意的是,每一個應用都有一個獨一無二的task,當打開新的一個應用時,它的task出現在前台,顯示給用戶,而舊的task將會轉入後台,這時候系統會自動保存舊task窗口對象的狀態,等該task被重新切換到前台運行後,該窗口回復焦點的同時也會恢復所有的狀態,然而。必須指出一點,不要以為處於後台的task會一直停留在內存裡,等待你回來。當手機內存被耗盡,或者新打開一個APP需要大量內存的時候,你所以為會等你的舊task將會無情地被系統干掉,哪個task被停止的時間越久越先被銷毀。
二、四種啟動模式launchMode
Activity有四種加載模式:
設置的位置在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開發權威指南》裡的一個例子,大家可以運行看看是不是這樣。
例程下載
在上一篇中我們討論了計算機網絡的體系結構和各層次的作用,在我們編程中TCP或UDP都提供了socket接口進行實現,實現的例子在上一篇中,這一篇我們主要討論一下Http協
效果如下: 此圖片不會動,但實際上是會快速跳動的。 之前看到有支付寶的效果非常牛逼。就是進去看到余額呼噜噜的直接上躥下跳到具體數字,效果帥,
我在此基礎上優化了部分代碼, 添加了滑動回調, 可自定義性更強. 並且添加了點擊按鈕左右滑動的功能.據說無圖都不敢發文章了.看圖:1:這種功能, 首先需要自己管理布局繼承
在Android開發過程中,經常會碰到Activity之間的切換效果的問題,下面介紹一下如何實現左右滑動的切換效果,首先了解一下Activity切換的實現,從Androi