《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中所能够做到的最重要的事情。

相关文章
|
1天前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
10 2
|
11天前
|
JavaScript Java Android开发
kotlin安卓在Jetpack Compose 框架下跨组件通讯EventBus
**EventBus** 是一个Android事件总线库,简化组件间通信。要使用它,首先在Gradle中添加依赖`implementation 'org.greenrobot:eventbus:3.3.1'`。然后,可选地定义事件类如`MessageEvent`。在活动或Fragment的`onCreate`中注册订阅者,在`onDestroy`中反注册。通过`@Subscribe`注解方法处理事件,如`onMessageEvent`。发送事件使用`EventBus.getDefault().post()`。
|
20天前
|
XML Android开发 数据格式
【Android UI】中间对齐UI组件
【Android UI】中间对齐UI组件
11 1
|
1月前
|
存储 设计模式 监控
88 PM撸代码之【Android四大基本组件】
88 PM撸代码之【Android四大基本组件】
23 0
|
1月前
|
前端开发 Android开发
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)
|
1月前
|
Android开发 算法 架构师
android的基础ui组件,这些知识点你会吗
android的基础ui组件,这些知识点你会吗
android的基础ui组件,这些知识点你会吗
|
1月前
|
Android开发 缓存 双11
android的基础ui组件,Android开发社招面试经验
android的基础ui组件,Android开发社招面试经验
android的基础ui组件,Android开发社招面试经验
|
1月前
|
Java 开发工具 Android开发
如何在Eclipse中查看Android源码或者第三方组件包源码(转)
如何在Eclipse中查看Android源码或者第三方组件包源码(转)
21 4
|
1月前
|
设计模式 前端开发 数据库
构建高效Android应用:使用Jetpack架构组件实现MVVM模式
【4月更文挑战第21天】 在移动开发领域,构建一个既健壮又易于维护的Android应用是每个开发者的目标。随着项目复杂度的增加,传统的MVP或MVC架构往往难以应对快速变化的市场需求和复杂的业务逻辑。本文将探讨如何利用Android Jetpack中的架构组件来实施MVVM(Model-View-ViewModel)设计模式,旨在提供一个更加模块化、可测试且易于管理的代码结构。通过具体案例分析,我们将展示如何使用LiveData, ViewModel, 和Repository来实现界面与业务逻辑的分离,以及如何利用Room数据库进行持久化存储。最终,你将获得一个响应迅速、可扩展且符合现代软件工
38 0
|
1月前
|
存储 设计模式 数据库
构建高效的安卓应用:探究Android Jetpack架构组件
【4月更文挑战第20天】 在移动开发的世界中,构建一个既高效又可维护的安卓应用是每个开发者追求的目标。随着Android Jetpack的推出,Google为开发者提供了一套高质量的库、工具和指南,以简化应用程序开发流程。本文将深入探讨Jetpack的核心组件之一——架构组件,并展示如何将其应用于实际项目中,以提升应用的响应性和稳定性。我们将通过分析这些组件的设计原则,以及它们如何协同工作,来揭示它们对于构建现代化安卓应用的重要性。