Android API Guides 閱讀筆記(2)----Activity

Activity 是應用程序的必備組件,它提供了一個屏幕,用戶可與之互動,以做一些事情,如撥打電話,拍照,發送電子郵件,或查看地圖。每個Activity 會提供一個窗口,在其中繪製它的用戶界面。通常窗口會填滿整個屏幕,但也有可能比屏幕小並且浮動在其他窗口之上。
通過閱讀這節內容,將會了解到:

  • 一個應用程序通常由許多Activity組成,其中一個Activity是程序入口Activity(用戶點擊程序圖標,首先進入的Activity),Activity之間通過Intent進行跳轉,通過後退棧(back stack)進行保存與取出,由此,引入Activity生命週期的概念,Activity的生命週期回調方法(onCreate(),onPause(),onDestory(),etc)由Android系統調用,開發者在這些回調方法中寫入一定的邏輯,然後等待系統根據用戶的操作進行調用

  • 默認程序入口Activity的清單文件裏,< intent-filter >中的< action >元素指定當前Activity爲應用程序的入口,< category >元素指定當前Activity應該放在Android系統應用程序列表界面(就是啓動圖標,用戶點擊就啓動這個Activity)

  • 其他Activity通過Intent可以啓動一個Activity,調用startActivity()或者startActivityForResult()(執行完成返回結果,例如選擇系統相冊中的照片過程),通過調用finish()可以關閉當前Activity

  • Activity的生命週期:

    • onCreate():當一個Activity首次被創建時(之前調用過onDestroy()使之銷燬)調用

    • onStart():當Activity對用戶可見的時候調用

    • onResumed():在用戶與Activity交互之前調用,此時的Activity位於棧頂

    注: 以下的回調方法爲“之後可被kill”的方法(調用之後系統可以將這個Activity銷燬),即當系統出現緊急情況(內存嚴重不足)時,可以不調用以下的方法直接結束進程,因此,對於數據和狀態的保存,需要考慮放在哪個方法裏比較合適

    • onPause():當系統將要啓動其他的Activity時調用,此方法通常用於保存當前Activity中的狀態和數據(如果系統內存緊急回收,將會調用onPause(),可能不會調用onStop()和onDestroy(),所以保存當前狀態的操作應該在onPause()中執行)、

    • onStop():當Activity不再對用戶可見時調用

    • onDestroy():在Activity被銷燬之前調用,當代碼中調用了finish()時也會調用此方法

    注意,在做任何事情之前,實現這些生命週期方法,必須始終調用父類的實現,即,調用super.onCreate();等.

  • Activity當前狀態保存:當一個Activity處於paused(onPause())或者stoped(onStop())時,當前Activity的狀態依然保留(用戶操作過的改變或填寫的一些內容依然存在),因爲這時的Activity依然駐留在內存中,因此當這個Activity回到屏幕前時,之前的改變還在,但是當這個Activity被系統銷燬後,這些數據就都不在了,因此,要想讓Activity被銷燬後重新創建時恢復之前的狀態,就需要使用onSaveInstanceState()方法,系統會在Activity銷燬前調用此方法,如果用戶是點擊back button按鈕離開當前頁面,則系統不會調用onSaveInstanceState()方法,只有在系統之前調用了onStop()或者onPause()時,纔會在接下來調用onSaveInstanceState()
    視圖組件中有Id屬性的組件會自動保存狀態,而沒有Id屬性的組件則不能保存狀態,可以通過在View佈局中對組件設置屬性:savaEnabled來設置組件是否可以保存狀態,或者通過調用其setSaveEnable()方法來設置

  • onPause()中保存數據和在onSaveInstanceState()保存數據的區別:在onSaveInstanceState()中保存的應該是短暫的UI變化,例如EditText中暫存的內容,或者CheckBox中暫存的選項,而在onPause()中保存的應該是需要保存到database中的數據

  • 當設備的配置參數改變時(例如屏幕的方向,設備的語言,鍵盤的可用性),系統會銷燬當前Activity並立即重新創建當前Activity(先調用onDestroy(),接着立即調用onCreate())

  • 從Activity–A中啓動Activity–B的過程:

    1. Activity–A調用onPause()

    2. Activity–B調用onCreate(),onStart(),onResume()

    3. Activity–A調用onStop()(等待一段時間後如果不再返回Activity–A,接着調用onDestroy())

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章