Android四大元件之Activity----重新認識Android(4)

AND_YOU_with_ME發表於2017-04-13

看一下這一張經典的生命週期流程圖,瞭解Activity生命週期的幾個過程:

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並重寫onCreate方法
內部呼叫父類的onCreate方法並且呼叫setContentView方法載入佈局檔案

再說一下activity的活動過程:
一、Activity的註冊
Activity使用要配置在清單檔案中的配置當前專案使用到的Activity

如果建立的是Activity那麼會預設註冊,否則需要手動註冊

通過意圖過濾器指定啟動的主Activity
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

二、Activity之間的跳轉:

跳轉需要用到Intent(意圖)物件--指明當前和目標的Activity
一般需要設定當前的Activity的物件和目標的Activity的Class物件
跳轉方式:
1、startActivity:單跳轉--
在MainActivity中定義Intent物件: Intent intent=new Intent(當前Activity.this,目標Activity.class)
呼叫startActivity(Intent)啟動“意圖”指定的Activity

2、startActivityForResult:回傳跳轉--目標Activity結束的時候,進行資料的回傳
A頁面: startActivityForResult(Intent,int reqCode)
A頁面: 重寫方法 onActivityResult(int reqCode,int resultCode,Intent data)
B頁面: setResult(int resultCode,Intent data)該方法會在BActivity銷燬的時候自動呼叫


當一個Activity需要向另外一個Activity跳轉並向第一個Activity返回資料的時候
我們可以採用回傳跳轉
FirstActivity
SecondActivity
步驟:
1、FirstActivity:設定回傳跳轉
使用startActivityForResult(Intent,int)方法,
引數說明:第一個引數為意圖物件(包含目標Activity的Class物件和資料)
第二個引數為請求碼,整型型別
2、FirstActivity:重寫onActivityResult(int,int intent)方法
此方法獲取回傳的資料
引數說明:
第一個引數:請求碼
第二個引數:結果響應嗎(由SecondActivity頁面指定整型)
第三個引數:回傳資料的意圖物件
3、SecondActivity:設定回傳資料setResult(int,intent)
引數說明:
第一個引數:結果響應嗎
第二個引數:意圖物件(包含目標Activity的Class物件和回傳資料)
三、Activity傳值方式:
1、Intent傳值是最通常的方法--putExtra或Bundle的用法較簡單,可以當作Map使用
2、靜態成員變數
3、Application全域性物件
4、startActivityForResult(資料回傳) 一般用於拍照、錄影、二維碼掃描


另外還有其他三個方法需要注意:

1.onWindowFocusChanged方法:在Activity視窗獲得或失去焦點時被呼叫,例如建立時首次呈現在使用者面前;當前Activity被其他Activity覆蓋;當前Activity轉到其他Activity或按Home鍵回到主屏,自身退居後臺;使用者退出當前Activity。

2.onSaveInstanceState:(1)在Activity被覆蓋或退居後臺之後,系統資源不足將其殺死,此方法會被呼叫;(2)在使用者改變螢幕方向時,此方法會被呼叫;(3)在當前Activity跳轉到其他Activity或者按Home鍵回到主屏,自身退居後臺時,此方法會被呼叫。第一種情況我們無法保證什麼時候發生,系統根據資源緊張程度去排程;第二種是螢幕翻轉方向時,系統先銷燬當前的Activity,然後再重建一個新的,呼叫此方法時,我們可以儲存一些臨時資料;第三種情況系統呼叫此方法是為了儲存當前視窗各個View元件的狀態。onSaveInstanceState的呼叫順序是在onPause之前。

3.onRestoreInstanceState:(1)在Activity被覆蓋或退居後臺之後,系統資源不足將其殺死,然後使用者又回到了此Activity,此方法會被呼叫;(2)在使用者改變螢幕方向時,重建的過程中,此方法會被呼叫。我們可以重寫此方法,以便可以恢復一些臨時資料。onRestoreInstanceState的呼叫順序是在onStart之後。

4.每次螢幕旋轉方向時,只有onConfigurationChanged方法被呼叫,沒有了銷燬重建的過程。需要注意的幾點:

            1.如果<activity>配置了android:screenOrientation屬性,則會使android:configChanges="orientation"失效。

            2.模擬器與真機差別很大:模擬器中如果不配置android:configChanges屬性或配置值為orientation,切到橫屏執行一次銷燬->重建,切到豎屏執行兩次。真機均為一次。模擬器中如果配置android:configChanges="orientation|keyboardHidden"(如果是Android4.0,則是"orientation|keyboardHidden|screenSize"),切豎屏執行一次onConfigurationChanged,切橫屏執行兩次。真機均為一次。


相關文章