本文概述
活动是Android应用程序的基础, 它们可以以不同的状态存在。活动生命周期从初始化开始, 到终止结束。活动生命周期包括应用程序初始化和终止之间的许多状态。活动是Android应用中的单个页面, 用户可以在其中执行交互。
活动状态
AndroidOS活动基于其状态。 Android状态可帮助Android识别不再使用的活动。 Android状态允许操作系统回收内存和资源。
该图显示了活动的生命周期内可以经历的状态。
状态分为四类:
- 活动或正在运行:当活动处于前台时, 可以将它们视为活动或正在运行。活动或运行状态也称为活动堆栈的顶部。运行状态被称为Android中最高优先级的活动。当活动试图使用比操作系统中可用内存更多的内存时, 在极端情况下可以终止该活动。在这种情况下, UI变得无响应。
- 已暂停:设备进入睡眠状态后, 活动仍然可见, 但被新的, 非标准尺寸或透明的活动部分隐藏, 在这种情况下, 活动被视为已暂停。暂停的活动仍处于活动状态, 即, 它们维护所有状态和成员信息, 并将仍附加到窗口管理器。暂停是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。活动应覆盖此方法以执行任务。这些任务是:
- 提高帧率。
- 开始动画
- 收听GPS更新
- 它将显示相关的警报, 例如对话框或警报。
- 连接外部事件处理程序。
在这里, 我们将编写代码以显示如何初始化相机。
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之后将调用的两个生命周期方法。
- 如果活动返回到前台, 则将调用OnResume。
- 当活动置于后台时, 将调用OnStop。
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生命周期为应用程序内的状态管理活动提供了强大的框架, 但可能难以理解和实现。
评论前必须登录!
注册