編輯:Android開發實例
今天學習Activity LifeCycle.
在Android,系統把Activities當做一個Activity Stack進行管理。當一個新的Activity被啟動時,它將放在這個Activity Stack的最頂部,然後成為一個Running Activity. 而上一個Activity總是在這個Activity的下一層,且將不會再顯示到前端直到一個新的Activity存在!
一個Activity本質上來說包括以下四個狀態:
1. 當一個Activity在屏幕的前台(foreground)時(同時也在Activity Stack的頂部)時,這個Activity就處在active或running狀態。
2. 當一個Activity失去了焦點,但是可見(例如:一個新的不是全屏的activity處於Activity Stack頂部)時,Activity處理Paused狀態. 一個被Paused的Activity是完全可用的(alive)(這時的Activity將保存所有的狀態與成員信息且仍處理Window manager 的attach范圍), 這種狀態下的Activity在系統極度缺少內存的情況下被系統殺掉!
3. 如果一個Activity完全被另一個Activity覆蓋時,該Activity就處理Stoped狀態。它將仍然保存所有狀態與成員信息,但是,它對用戶已經不在可見,所以,它的窗口被隱藏了。當系統需要內存時,系統會經常殺掉這種狀態的Activity。
4.當一個activity處理paused或stopped狀態時,系統可以清除這個activity的內存而不調用這個activity的finish方法或者簡單的結束它的進程,當它被再次顯示給用戶,它需要再次完全啟動,並還原到最近的一狀態。
下面所說的方法可以理解為Activity進入對應狀態時會被調用的方法!
下面的一張圖說明了Activity的狀態變化路線圖。長方形表示你可以覆蓋這些方法,以便在Activity狀態切換之間執行一定的動作。含有顏色的橢圓表示Activity可能經常處於的狀態!
下面是三個在你控制或監控(monitoring)Activity過程中比較重要的三個循環:
1. 全個生命期(The entire lifetime). 這個生命周期發生在第一調用onCreate(Bundle)方法到最終的對onDestroy()的調用。一個Acitivity可以在onCreate()方法中對全局的狀態進行初始化,在onDestroy中釋放所有用到的資源。例如:如果需要一個後台運行的從網絡中下載數據的線程,那麼可以在onCreate()函數中進行創建,在onDestroy()中停止。
2. 可視生命期(visible lifetime). 這個生命期從調用onStart()方法開始到調用onStop()函數結束。在該生命期中,用戶可以在屏幕上看到這個activity,盡管他可能不在前台,不能與用戶進行交互,在這個生命期中,你可以維護那些你要顯示給用戶看的數據。例如:為了監控所有可以對你的UI產生影響的消息,你可以在onStart()函數中注冊一個BroadcastReceiver,然後當用戶不能看到你所要顯示的信息,在onStop()函數中反注冊它。onStart()與onStop()方法可以被調用多次。
3. 前台生命期(foreground lifetime).前台生命期從onResume()到onPause()。在這期間,這個activity在其他activity的前面,且正在與用戶進行交互。一個activity可以很頻繁的在Resumed與Paused狀態之間進行切換。例如當設備Sleep時、一個Activity result被傳遞時、一個新的Intent被傳遞時等。所以,運行在這期間的代碼必須時快速輕量級的。
一個activity的整個生命周期定義在下面的activity方法中。你可以覆蓋這些方法,使得activity在不同狀態之間執行一定的動作。所有的activities都將實現onCreate(Bundle)方法去完成初始化設置工作,在實現這些方法的過程中,你需要經常調用這些方法的superclass.
public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy(); }
Most importantly, any changes made by the user should at this point be committed (usually to the ContentProvider holding the data).
重要一點:用戶操作的變化都應該在這時進行保存!通常使用ContentProvider進行保存!
以上資料是我翻譯自Android 3.0 Doc. 懇請高手指點!
Android中可以直接在位圖上進行人臉檢測。Android SDK為人臉檢測
這個是網易新聞的主界面,我們知道底部可以用tabhost實現,這個很容易,我們在其他軟件中也會經常用到。 至於頂部的滑動條,個人感覺還是比較漂亮的所以今天也模仿了
在Android上開發一些小應用既可以積累知識又可以增加樂趣,與任務式開發不同
step1:新建一個項目Compass,並將一張指南針圖片導入到res/drawable-hdpi目錄中 step2:設計應用的UI界面,main.x