Android四大組件分別爲Activity、Servic服務、Content Provider 內容提供者、Broadcast Receiver 廣播接收器。
這次,來簡單講一下Android四大組件中的Activity。
一、什麼是Activity
1.一個activity通常展現爲一個可視化的用戶界面,
2.一個應用程序可能只包含一個或者多個activity,
3.每個activity都會有一個用於繪製用戶界面的窗口。
它就像是一個大容器,可以放下一些按鈕,圖片,各種控件等。
二、Activity的生命週期
如圖:
1、protected void onCreate(Bundle savedInstanceState)//創建
onCreate(Bundle)接口是初始化activity的地方. 在這兒通常可以調用setContentView(int)設置在資源文件中定義的UI, 使用findViewById(int) 可以獲得UI中定義的窗口.
2、protected void onStart()//開始
3、protected void onResume()//開始//啓動
4、protected void onPause()//暫停
onPause()接口是使用者準備離開activity的地方,在這兒,任何的修改都應該被提交(通常用於ContentProvider保存數據).
5、protected void onStop()//停止
6、protected void onRestart()//重啓
7、protected void onDestroy()//銷燬
在這七個生命週期方法中,常用到的幾個過程如下
1.啓動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後臺:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。
5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。
6.當前Activity處於被覆蓋狀態或者後臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。
一些關於 Activity 的技巧
鎖定 Activity 運行時的屏幕方向
Android 內置了方向感應器的支持。在 G1 中,Android 會根據 G1 所處的方向自動在豎屏和橫屏間切換。但是有時我們的應用程序僅能在橫屏 / 豎屏時運行,比如某些遊戲,此時我們需要鎖定該 Activity 運行時的屏幕方向,節點的 android:screenOrientation屬性可以完成該項任務,示例代碼如:
<activity android:name=".EX01"
android:label="@string/app_name"
android:screenOrientation="portrait">
// 豎屏 , 值爲 landscape 時爲橫屏
…………
</activity>
全屏的 Activity
要使一個 Activity 全屏運行,可以在其 onCreate()方法中添加如下代碼實現:
// 設置全屏模式
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 去除標題欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
在Activity 的 Title 中加入進度條
爲了更友好的用戶體驗,在處理一些需要花費較長時間的任務時可以使用一個進度條來提示用戶“不要着急,我們正在努力的完成你交給的任務”。如下圖:
在 Activity 的標題欄中顯示進度條不失爲一個好辦法,下面是實現代:
// 不明確進度條
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.main);
setProgressBarIndeterminateVisibility(true);
// 明確進度條
requestWindowFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.main);
setProgress(5000);