《Android程序设计》一3.7 组件生命周期

简介: 本节书摘来自华章出版社《Android程序设计》一 书中的第3章,第3.7节,作者:G. Blake Meike, Masumi Nakamura,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.7 组件生命周期

我们在前面提到过组件的生命周期。例如,onCreate操作会启动一个应用。组件生命周期有两个用途:它有助于每个应用的内存或堆空间被有效利用,并且能够确保保存和恢复整个进程的状态,从而使得Android系统能够运行比实际内存容量更多的应用。
活动生命周期
最复杂的组件生命周期是活动的生命周期。这里我们将通过图表描述它,看看这些状态变化在代码层面是如何处理的。在图3-5中,可以看到活动生命周期的状态和状态转换。处理生命周期状态转换的核心因素在于选择需要实现的那一种生命周期回调,并了解什么时候执行这些回调。
在第11章中,我们将进一步深入探讨这个话题。现在,我们来看看Activity类的两种方法。在运行时调用第一种方法通知应用保存其状态,调用第二种方法支持新的Activity实例恢复已经销毁的Activity生命周期的状态。下面这段代码摘自第11章,在第11章可以看到整个程序,包括所指向的成员变量:
screenshot

当运行时系统要销毁某个活动但是希望能够在后期重新恢复其状态时,会调用activity的onSaveInstanceState方法。这一点和执行状态转换的其他生命周期方法有显著区别。举个例子,如果一个活动显式地结束了,其状态就不再需要恢复,即使需要传递当前的paused状态,调用其onPause方法。正如之前的代码片段所示,在onSaveInstanceState方法中要做的是保存用户在后期会用到的状态,做到该活动的状态销毁和恢复对于后期使用是透明的:
···
@Override

protected void onRestoreInstanceState(Bundle savedState) {
    super.onRestoreInstanceState(savedState);
    // Restore state; we know savedState is not null
    String answer = savedState.getString("answer");
    // ...
    Log.i(TAG, "onRestoreInstanceState"
          + (null == savedState ? "" : RESTORE) + " " + answer);
}

···
当重新创建已经销毁的活动时,会调用onRestoreInstanceState方法。因此,会运行该应用活动的一个新的实例。该应用活动的前一个实例中通过onSaveInstanceState方法所存储的数据,会通过onRestoreInstanceState方法传递给新的实例。
你可能会认为活动有如此复杂的生命周期,并且堆使用需求限制很严格,Android的活动生命周期在Android应用代码中应该很清晰,需要花费很多时间和精力来满足活动生命周期需求。然而,实际上并非如此。
在很多Android代码中,尤其在小的Android实例中,很少实现生命周期回调功能。这是由于Activity父类会处理生命周期回调,即类View及其子类,并且保存它们的状态,如图3-6所示。这意味着在很多情况下,Android的View类会提供所有必要的用户接口功能, Android应用不需要显式处理大多数的生命周期回调。

screenshot

这看起来确实很不错,因为它使得Android编程变得简单多了。你不需要编写任何代码,就可以轻松实现如图3-6所示的内容。然而,它也存在不足,因为它会导致编程人员忽略活动的生命周期,直到某天发现自己的代码存在一堆bug变得一团糟。这也是在这里强调生命周期的原因,这也是在第11章要说明如何处理所有的生命周期回调并记录日志的原因。要充分意识到活动生命周期可能是在预防那些难以诊断的bug中所能够做到的最重要的事情。

相关文章
|
7天前
|
存储 Android开发 开发者
深入理解安卓应用开发的核心组件
【10月更文挑战第8天】探索Android应用开发的精髓,本文带你了解安卓核心组件的奥秘,包括Activity、Service、BroadcastReceiver和ContentProvider。我们将通过代码示例,揭示这些组件如何协同工作,构建出功能强大且响应迅速的应用程序。无论你是初学者还是资深开发者,这篇文章都将为你提供新的视角和深度知识。
|
10天前
|
数据可视化 Android开发 开发者
安卓应用开发中的自定义View组件
【10月更文挑战第5天】在安卓应用开发中,自定义View组件是提升用户交互体验的利器。本篇将深入探讨如何从零开始创建自定义View,包括设计理念、实现步骤以及性能优化技巧,帮助开发者打造流畅且富有创意的用户界面。
36 0
|
10天前
|
XML 前端开发 Java
安卓应用开发中的自定义View组件
【10月更文挑战第5天】自定义View是安卓应用开发的一块基石,它为开发者提供了无限的可能。通过掌握其原理和实现方法,可以创造出既美观又实用的用户界面。本文将引导你了解自定义View的创建过程,包括绘制技巧、事件处理以及性能优化等关键步骤。
|
17天前
|
Android开发 开发者 UED
深入理解安卓应用开发中的生命周期管理
本文旨在探讨安卓应用开发中生命周期管理的重要性,以及如何有效利用生命周期解决常见问题。通过分析安卓应用生命周期的不同阶段及其特点,提供实用的代码示例和调试技巧,帮助开发者优化应用性能,提升用户体验。
29 8
|
19天前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
26 6
|
19天前
|
Java Android开发 UED
深入探索安卓应用开发中的生命周期管理:从创建到销毁的全过程
在安卓应用开发中,理解并妥善管理应用及活动(Activity)的生命周期至关重要。本文将详细解析从应用创建到销毁的整个生命周期过程,以及如何通过高效管理提升应用性能与用户体验。
44 4
|
1月前
|
存储 开发框架 数据可视化
深入解析Android应用开发中的四大核心组件
本文将探讨Android开发中的四大核心组件——Activity、Service、BroadcastReceiver和ContentProvider。我们将深入了解每个组件的定义、作用、使用方法及它们之间的交互方式,以帮助开发者更好地理解和应用这些组件,提升Android应用开发的能力和效率。
97 5
|
1月前
|
缓存 搜索推荐 Android开发
安卓应用开发中的自定义View组件实践
【9月更文挑战第10天】在安卓开发领域,自定义View是提升用户体验和实现界面个性化的重要手段。本文将通过一个实际案例,展示如何在安卓项目中创建和使用自定义View组件,包括设计思路、实现步骤以及可能遇到的问题和解决方案。文章不仅提供了代码示例,还深入探讨了自定义View的性能优化技巧,旨在帮助开发者更好地掌握这一技能。
|
2月前
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
2月前
|
Android开发 UED 开发者
探索安卓应用的生命周期管理
【8月更文挑战第31天】在开发安卓应用时,理解并妥善处理应用的生命周期是至关重要的。本文将通过浅显易懂的方式,带你了解安卓应用的生命周期,并通过代码示例展示如何在实际应用中进行有效的生命周期管理。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技巧。