活動生命週期

活動生命週期要複雜得多。如你所知,Activity 是 Android 應用中的單頁,使用者可以在其中執行互動。

在下圖中,你可以看到 Android Activity 生命週期的樣子:

StackOverflow 文件

如你所見,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() 的相應呼叫。在此期間,活動位於所有其他活動之前並與使用者互動。活動可以經常在恢復和暫停狀態之間進行 - 例如,當裝置進入休眠狀態,傳遞活動結果時,何時傳遞新意圖 - 因此這些方法中的程式碼應該相當輕量級。