📅  最后修改于: 2021-01-11 16:14:28             🧑  作者: Mango
活动是Android应用程序的基础,它们可以以不同的状态存在。活动生命周期从初始化开始,到终止结束。活动生命周期包括应用程序初始化和终止之间的许多状态。活动是Android应用中的单个页面,用户可以在其中执行交互。
AndroidOS活动基于其状态。 Android状态可帮助Android识别不再使用的活动。 Android状态允许操作系统回收内存和资源。
该图显示了活动在其生命周期内可能经历的状态。
状态分为四类:
当用户浏览Android应用程序时,会发生一系列事件。例如,当我们启动一个应用程序(例如Facebook应用程序)时,它会启动并显示在用户的前台onCreate()→onStart()→onResume() 。
如果任何其他活动开始,例如:当有电话到达时,Facebook应用程序将转到后台,而呼叫到达前台。现在我们正在进行两个过程。
onPause() --- > onStop()
通话结束后, Facebook应用将返回前台。调用了三种方法。
onRestart() --- > onStart() --- > onResume()
Xamarin.Android框架提供了一个强大的模型来管理应用程序内的活动状态。当活动的状态更改时,操作系统会通知活动,操作系统会在该活动上调用特定的方法。
以下是指定与活动生命周期的关系的几种方法:
作为开发人员,我们可以通过覆盖活动中的方法来处理状态更改。在这里,我们必须注意,所有生命周期方法都是在UI线程上调用的,并且阻止操作系统执行下一个UI工作。它将隐藏当前活动并显示新活动。任何长时间运行的任务都应在后台线程上执行。
以下是生命周期方法及其用途:
OnCreate: OnCreate是创建任何活动时调用的第一个方法。 OnCreate始终被覆盖以执行任何活动所需的任何初始化,例如:
OnCreate采用Bundle参数,Bundle参数是用于在活动之间存储和传递状态和对象的信息的字典。如果bundle不为空,则表明该活动正在重新启动,并且应从上一个活动中恢复其状态。
protectedoverridevoidOnCreate(Bundle bundle)
{
base.OnCreate(bundle);
string intentString;
bool intentBool;
if (bundle != null)
{
intentString = bundle.GetString("myString");
intentBool = bundle.GetBoolean("myBool");
}
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
}
OnCreate完成后,Android将启动OnStart。
OnStart: OnCreate完成后,系统将调用OnStart。如果需要在可见任何活动之前执行任何任务,则活动可以覆盖此方法。 OnStart包括(例如)刷新活动中视图的当前值。 Android将在OnStart之后调用OnResume方法。
OnResume:当准备好任何活动开始与用户的交互时,系统将调用OnResume。活动应覆盖此方法以执行任务。这些任务是:
在这里,我们将编写代码以显示如何初始化相机。
publicvoidOnResume()
{
base.OnResume(); // Always call the superclass first.
if (_camera==null)
{
// Do camera initializations here
}
}
OnResume很重要,因为在OnPause中完成的任何操作都应在OnResume中撤消。当我们开始任何活动时,它是OnPause之后执行的唯一方法。
OnPause:当系统要将活动置于后台或该活动不可见时,将调用OnPause。如果需要执行以下操作,则活动应覆盖OnPause方法:
示例:在此示例中,我们释放相机。活动在暂停期间无法使用它。
publicvoidOnPause()
{
base.OnPause(); // Always call the superclass first
// Release the camera as other activities might need it
if (_camera != null)
{
_camera.Release();
_camera = null;
}
}
这是OnPause之后将调用的两个生命周期方法。
OnStop:如果看不见活动,那么我们将使用OnStop。在以下情况下会发生此活动:
当Android需要内存资源且无法在后台进行活动时,无法在内存不足的情况下调用OnStop。这就是我们计划终止任何活动时不能依赖OnStop的原因。
如果该活动即将结束,则可以在此之后调用的下一个生命周期方法将是OnDestroy,如果该活动返回进行交互,则将使用OnRestart。
OnDestroy: OnDestroy是在活动实例上销毁并从内存中完全删除之前在活动实例上调用的最终方法。在极端情况下,Android可能会终止活动的托管过程,从而导致无法实施OnDestroy。通常,活动不会执行此方法,因为主要是在OnPause或OnStop方法中进行了清理和关闭。
通常,重写OnDestroy方法以清除可能会泄漏资源的长期运行的资源。
这样的示例是在OnCreate中启动的后台线程。活动销毁后将没有生命周期方法。
OnRestart:在停止活动之后,在恢复活动之前调用OnRestart。
例如,当用户在应用程序中进行活动时按下主屏幕按钮时。发生这种情况时,将调用OnPause和OnStop ,然后将活动移至后台,但不会销毁。如果我们要重新安装该应用程序,则使用任务管理器或类似的应用程序,Android会调用Activity的OnRestart方法。
OnStart将是OnRestart之后要调用的下一个生命周期方法。
Android Activity生命周期为应用程序内的状态管理活动提供了强大的框架,但可能难以理解和实现。