Activity的三種狀態以及對應的方法
- 顯示狀態
- onCreate
- onStart 活動由不可見->可見
- onResume 活動準備好與用戶交互時候
- 不可見狀態
- onPause 啓動或者恢復另一個活動時候調用,通常在該方法釋放和保存一些數據。但這個方法的執行速度要快,否則影響到新的棧頂活動的使用
- onStop 活動【完全】不可見時候調用,比如調用對話框這個方法不會執行
- 銷燬狀態
- onDestroy
活動A啓動一個新的活動B所執行的生命週期方法流程
- A:onPause->B:onCreate->B:onStart->B:onResume->A:onStop
- 爲什麼先執行onPause方法?
- 比如A活動正在播放音頻,突然有電話接入,要立刻啓動電話接入活動,所以要先把A活動的音頻暫停(onPause),才能啓動新的活動。
- 所以一般在onPause方法中可以將音頻,視頻暫停
- 爲什麼執行完B的3個方法再執行A的onStop方法?
- 因爲執行A的onStop方法說明A活動已經不可見了,假如先執行A的onStop方法再創建B活動,萬一活動B出現閃退現象,則會出現黑屏現象,用戶體驗不好。
- 所以這是因爲防止新的活動會出現閃退現象而造成黑屏的現象方法。
Activity橫豎屏切換問題
- 橫豎屏切換的生命週期爲:onPause->onStop->onDestroy->onCreate->onStart->onResume
- 爲了保持當前Activity的狀態,可以調用onSaveInstanceState方法,在該方法中保存一些狀態信息,然後調用onCreate方法時候可以將保存的數據讀取出來。生命週期爲:
- onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onResume
啓動Activity的方式
- 顯式啓動
- 當Activity的類名已知,可以通過顯式啓動
- 匿名啓動
- 調用系統的Activity,比如瀏覽器,短信等等
- 比如調用其他的Activity,無法知道類名情況
- 通過Manifest文件,設置activity標籤裏面中的action和category屬性,如下圖,其中“xxx”自己設定
- 然後在調用的Activity代碼中,寫入以下代碼即可,xxxx要與上圖的xxxx相同: