活動生命週期
活動生命週期要複雜得多。如你所知,Activity 是 Android 應用中的單頁,使用者可以在其中執行互動。
在下圖中,你可以看到 Android Activity 生命週期的樣子:
如你所見,Activity 生命週期有特定的流程。在移動應用程式中,你當然有每個 Activity 類中處理特定生命週期片段的方法:
[Activity(Label = "LifecycleApp", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Log.Debug("OnCreate", "OnCreate called, Activity components are being created");
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.MainActivity);
}
protected override void OnStart()
{
Log.Debug("OnStart", "OnStart called, App is Active");
base.OnStart();
}
protected override void OnResume()
{
Log.Debug("OnResume", "OnResume called, app is ready to interact with the user");
base.OnResume();
}
protected override void OnPause()
{
Log.Debug("OnPause", "OnPause called, App is moving to background");
base.OnPause();
}
protected override void OnStop()
{
Log.Debug("OnStop", "OnStop called, App is in the background");
base.OnStop();
}
protected override void OnDestroy()
{
base.OnDestroy();
Log.Debug("OnDestroy", "OnDestroy called, App is Terminating");
}
}
官方 Android 文件中有很好的描述:
-
活動的整個生命週期發生在第一次呼叫
onCreate(Bundle)
到最後一次呼叫onDestroy()
之間。活動將在onCreate()
中完成所有全域性狀態設定,並釋放onDestroy()
中的所有剩餘資源。例如,如果它有一個在後臺執行的執行緒從網路下載資料,它可以在onCreate()
中建立該執行緒,然後在onDestroy()
中停止該執行緒。 -
活動的可見生命週期發生在對
onStart()
的呼叫之間,直到對onStop()
的相應呼叫。在此期間,使用者可以在螢幕上看到活動,儘管它可能不在前臺並與使用者互動。在這兩種方法之間,你可以維護向使用者顯示活動所需的資源。例如,你可以在onStart()
中註冊 BroadcastReceiver 以監視影響 UI 的更改,並在使用者不再看到你正在顯示的內容時在onStop()
中取消註冊。onStart()
和 onStop()方法可以多次呼叫,因為活動對使用者可見並隱藏。 -
活動的前景生命週期發生在對
onResume()
的呼叫之間,直到對onPause()
的相應呼叫。在此期間,活動位於所有其他活動之前並與使用者互動。活動可以經常在恢復和暫停狀態之間進行 - 例如,當裝置進入休眠狀態,傳遞活動結果時,何時傳遞新意圖 - 因此這些方法中的程式碼應該相當輕量級。