coursera上Programming Mobile Applications for Android Handheld Systems: Part 1的課程筆記。
本講的內容爲Activity類介紹。
*概述
Activity類是與用戶交互的基礎類,Activity提供可視化的接口,這樣用戶能夠和應用交互。Activity需要模塊化,每一個Activity能夠支持單一的焦點事件,比如瀏覽郵件信息或者在屏幕中顯示日誌。
通過支持任務回溯概念來管理用戶交互的特定Activity,並保證Activity在任務回溯棧中出入棧時被掛起和重啓。在Android中,Task是一系列相關Activity的組合,通常當用戶在home界面啓動一個新應用時,一個Task被創建。任務回溯棧則類似調用棧的概念。
Activity生命週期:
當Activity處於Resumed或Running狀態時,它相對用戶可見,用戶可以與之交互。
當Activity處於Paused狀態時,它可以相對用戶可見,但用戶不能與之交互。在此狀態下Activity可能被Android終止。
當處於Stopped狀態時Activity變爲不可見狀態,Android終止Activity直到用戶重新回到這個Activity。
Android提供了一系列方法供調用,爲onCreate,onStart,onResume,onPause,onStop,onDestroy,onRestart。
Android不一定總執行onStop方法,因爲應用進程可能被直接終止。
應用在onStart到onStop之間的週期範圍內可見。
下圖爲常見的Activity生命週期圖。
onCreate()
onCreate方法在Activity被首次被創建時調用,主要作用是初始化Activity。
1、調用super.onCreate()
2、設置Activity的內容視圖
3、保持和配置UI視圖
onRestart()
onRestart方法在Activity被停止後又重新啓動時調用。
onStart()方法完成在用戶可見的形式下的行爲。比如在閱讀郵件應用裏的更新未讀信息隊列操作。
onResume()方法,當Activity可見並將開始與用戶交互時調用。如開始動畫或播放背景音樂。
onPause()方法,當Activity即將失去焦點時被調用。在這個方法中可以結束一些前臺行爲如結束動畫。此外用戶編輯的保留狀態信息也在這個方法中保存。
onStop()方法當Activity對用戶不可見時調用。因爲Activity可能重新啓動,這裏可以緩存狀態信息。onStop方法可能不會被調用到,比如當內存不夠時Android直接終止應用進程,所以應將存儲數據的操作放在onPause方法中。
onDestroy()方法調用時間是Activity即將被銷燬時。內容是釋放Activity的資源,如私有線程。
創建一個intent對象來指定要啓動的Activity,然後將其傳遞給startActivity()或startActivityForResult()方法。其中startActivityForResult()方法會得到在被調用Activity中onActivityResult()方法中的值。
Activity.setResult()方法用於設置被調用Activity的返回值。
*更改配置
當設備的配置在運行時改變,Android會終止當前進程,並使用合適的資源重啓它,因此要保證生命週期方法中的代碼高效。
對此,當發生這種改變時,你可以用一個Java對象來保存狀態信息,方法是重寫onRetainNonConfigurationInstance(),這個方法在onStop和onDestroy間被調用,而它返回的對象將在Activity被重建時通過getLastNonConfigurationInstance獲得,但現在這種方法不被提倡;或者,你可以手動處理配置改變,在AndroidManifest.xml文件中聲明常被改變的配置,這樣當配置在運行時改變,Activity會受到對onConfigurationChanged()方法的調用,帶有新配置的Configuration對象會作爲參數傳入。