Android入门教程之组件Activity的生命周期详解

目录
  • 返回栈
  • Activity 状态
    • 1. 运行状态
    • 2. 暂停状态
    • 3. 停止状态
    • 4. 销毁状态
  • Activity 的生存期
    • onCreate()
    • onStart()
    • onResume()
    • onPause()
    • onStop()
    • onDestroy()
    • onRestart()
    • 完整生存期
    • 可见生存期
    • 前台生存期
  • Activity 回收处理

返回栈

Android 中的 Activity 是可以层叠的,我们每启动一个新的 Activity,就会覆盖在原有的 Activity 之上,然后点击 Back 键会销毁最上面的 Activity,下面的一个 Activity 就会重新显示出来

其实 Android 是使用任务(task)来管理 Activity 的,一个任务就是一组存放在栈里的 Activity 的集合,这个栈也被称作返回栈

默认情况下,启动一个新的 Activity,它就会在返回栈中入栈,并处于栈顶的位置。而每当我们按下 Back 键或调用 finish() 方法销毁一个 Activity 时,处于栈顶的 Activity 就会出栈,前一个入栈的 Activity 就会重新处于栈顶的位置。系统总是会显示处于栈顶的 Activity 给用户

Activity 状态

每个 Activity 在其生命周期中最多可能有四种状态:

1. 运行状态

当一个 Activity 位于返回栈的栈顶时,Activity 就处于运行状态

2. 暂停状态

当一个 Activity 不再处于栈顶位置,但仍然可见时,Activity 就进入了暂停状态

3. 停止状态

当一个 Activity 不再处于栈顶位置,并且完全不可见时,就进入了停止状态

4. 销毁状态

一个 Activity 从返回栈中移除后就变成了销毁状态

Activity 的生存期

Activity 类中定义了七个回调方法,覆盖了 Activity 生命周期的每一个环节:

onCreate()

它会在 Activity 第一次被创建时调用,可以在这个方法中完成 Activity 的初始化操作,比如加载布局、绑定事件等

onStart()

这个方法在 Activity 由不可见变为可见的时候调用

onResume()

这个方法在 Activity 准备好和用户进行交互时调用,此时的 Activity 一定位于返回栈的栈顶,并且处于运行状态

onPause()

这个方法在系统准备去启动或者恢复另一个 Activity 的时候调用,我们通常会在这个方法将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶 Activity 的使用

onStop()

这个方法在 Activity 完全不可见的时候调用,它和 onPause() 方法的主要区别在于,如果启动的新的 Activity 是一个对话框式的 Activity,那么 onPause() 方法会得到执行,而 onStop() 方法并不会执行

onDestroy()

这个方法在 Activity 被销毁之前调用,之后 Activity 的状态将变为销毁状态

onRestart()

这个方法在 Activity 由停止状态变为运行状态之前调用,也就是 Activity 被重新启动了

以上七个方法中除了 onRestart() 方法,其他都是两两相对的,从而又可以将 Activity 分为以下三种生存期:

完整生存期

Activity 在 onCreate() 方法和 onDestroy() 方法之间所经历的就是完整生存期。一般情况下,一个 Activity 会在 onCreate() 方法中完成各种初始化操作,而在 onDestroy() 方法中完成释放内存的操作

可见生存期

Activity 在 onStart() 方法和 onStop() 方法之间所经历的就是可见生存期。在可见生存期内,Activity 对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法合理地管理那些对用户可见的资源。比如在 onStart() 方法中对资源进行加载,而在 onStop() 方法中对资源进行释放,从而保证处于停止状态的 Activity 不会占用过多内存

前台生存期

Activity 在 onResume() 方法和 onPause() 方法之间所经历的就是前台生存期。在前台生存期内,Activity 总是运行状态,此时的 Activity 是可以和用户进行交互的,我们平时看到的和接触最多的就是这个状态下的 Activity

Activity 回收处理

当一个 Activity 进入了停止状态,是有可能被系统回收的。如果一个 Activity 由于系统内存不足而被回收,用户再返回该 Activity 时,其实还是会正常显示的,但这时并不会执行 onRestart() 方法,而是会执行 Activity 的 onCreate() 方法,因为 Activity 在这种情况下会被重新创建一次

如果 Activity 存在临时数据和状态,比如文本输入框已经输入了一段文字,回来以后文字都没了,那这是比较影响用户体验的。Activity 提供了一个 onSaveInstanceState() 回调方法,该方法可以保证在 Activity 被回收之前一定会被调用,可以通过这个方法来解决这个问题

onSaveInstanceState() 方法会携带一个 Bundle 类型的参数,Bundle 提供了一系列的方法用于保存数据

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    var tempData = "Something you just typed"
    outState.putString("data_key", tempData)
}

数据保存以后,在 onCreate() 方法有一个 Bundle 类型参数,该参数带有之前保存的全部数据,只需再通过相应的取值方法将数据取出即可

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    if (savedInstanceState != null) {
        val tempData = savedInstanceState.getString("data_key")
    }
}

到此这篇关于Android入门教程之组件Activity的生命周期详解的文章就介绍到这了,更多相关Android Activity内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-10-07

故事讲解Activity生命周期(猫的一生)

大家好,关于Android中Activity的生命周期,网上大多数文章基本都是直接贴图.翻译API,比较笼统含糊不清. 我就用故事来说一说: 有个人叫User,TA养了几只猫,有只猫叫Activity.User见证了Activity猫的一生. User想要一只小猫(想用一些功能),于是让一只母猫和一只公猫交配(触摸屏幕打开Activity界面), 之后经过母猫一段时间的孕育(Activity launched),小猫咪出生了(onCreate),取名叫Activity,放在笼子(App)里养.

Android Activity生命周期和堆栈管理的详解

Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用户也不能实例化,是系统进行回调,例如web开发的servlet也是系统提供的,和android 的其他系统组件一样. 那么不需要我们实例化我们怎么用呢,这些组件都有相同的特点就是: 1.都需要在配置文件中注册 2.都需要自定义类去继承系统的Api 3.都有自己的生命周期 那么Activity的生命周

Android非异常情况下的Activity生命周期分析

Activity非异常情况下的生命周期是指,用户正常参与UI交互的情况下,Activity所经过的生命周期的改变:一般情况下,Activity会经过以下几个生命周期. 1.OnCreate(): 表示Activity正在创建,这个是生命周期的第一个方法,该方法只调用一次,在这个方法中,一般做变量初始化的操作,例如绑定一个Button控件的Id等. 2.onRestart(): 表示Activity正在重新启动,一般情况下,如果最前面的Activity从不可见状态变为可见状态时,onRestart

android基础总结篇之一:Activity生命周期

近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下. 熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实Android中的Activity运行机制跟servlet有些相似之处,Android系统相当于servlet容器,Activity相当于一个servlet,我们的Activi

Activity跳转时生命周期跟踪的实例

android应用当中Activity间相互跳转比较常见.本文将通过例子跟踪一下2个Activity间跳转过程中生命周期的变化过程. 整个操作过程如下图所示: 1. 打开应用,自动开启First Activity: 2. 按下"Jump Button"按钮,打开Second Activity: 3. 按下"回退"按钮,退出Second Activity,自动回到First Activity: 4. 按下"回退"按钮,退出应用,自动关闭First

Android Activity的生命周期详细介绍

Android Activity的生命周期详细介绍 生命周期描述的是一个类从创建(new出来)到死亡(垃圾回收)的过程中会执行的方法.在这个过程中,会针对不同的生命阶段调用不同的的方法. Activity是Android中四大组件之一,是最常见的应用组件,也是用的最多的组件,它能够提供一个界面与用户进行交互.Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括:onCreate  onDestory  onStart  onStop  onRes

Maven构建生命周期详细介绍

什么是构建生命周期 构建生命周期是一组阶段的序列(sequence of phases),这些构建生命周期中的每一个由构建阶段的不同列表定义,其中构建阶段表示生命周期中的阶段. 例如,默认(default)的生命周期包括以下阶段(注意:这里是简化的阶段,用于生命周期阶段的完整列表): 验证(validate) - 验证项目是否正确,所有必要的信息可用 编译(compile) - 编译项目的源代码 测试(test) - 使用合适的单元测试框架测试编译的源代码.这些测试不应该要求代码被打包或部署 打

Android Service类与生命周期详细介绍

Android  Service类与生命周期 Service是Android四大组件与Activity最相似的组件,都代表可执行的程序,区别在于Service一直在后台运行且没有用户界面. 1.Service的类图和生命周期 先来看看Service的类图: 接下来看看Service的生命周期: 2.开发Service (1)开发Service需要两步: 第1步:定义子类,继承Service 第2步:在AndroidManifest.xml文件中配置Service (2)创建Service pub

微信小程序(五)页面生命周期详细介绍

这里只要熟悉页面的基本生命周期即可,业务在指定生命周期函数内书写. 以下是官网给出的生命周期函数方法和状态图 上面的生周期函数图对于做Android 或者IOS的来书理解起来应该不是难事,具体怎么掌握只有慢慢尝试和摸索 代码处理: 这里的代码主需要对使用创建项目时index目录下文件处理下就行,至于跳转后的页面用的还是logs不需要更改!下面贴下代码注释也比较详细 index.wxml <!--index.wxml--> <view class="container"

Spring Bean的生命周期详细介绍

Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring容器.这里,我们讲的也是 ApplicationContext中Bean的生命周期.而实际上BeanFactory也是差不多的,只不过处理器需要手动注册. 一.生命周期流程图: Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关

jsp 生命周期详细介绍

jsp 生命周期 理解JSP底层功能的关键就是去理解它们所遵守的生命周期. JSP生命周期就是从创建到销毁的整个过程,类似于servlet生命周期,区别在于JSP生命周期还包括将JSP文件编译成servlet. 以下是JSP生命周期中所走过的几个阶段: 编译阶段:servlet容器编译servlet源文件,生成servlet类 初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法 执行阶段:调用与JSP对应的servlet实例的服务方法 销毁阶段:调用与JSP对应的s

Docker Runc容器生命周期详细介绍

Docker Runc容器生命周期 容器的生命周期涉及到内部的程序实现和面向用户的命令行界面,runc内部容器状态转换操作.runc命令的参数定义的操作.docker client定义的容器操作是不同的,比如对于docker client的create来说, 语义和runc就完全不同,这一篇文章分析runc的容器生命周期的抽象.内部实现以及状态转换图.理解了runc的容器状态转换再对比理解docker client提供的容器操作命令的语义会更容易些. 容器生命周期相关接口 最基本的require

微信小程序 生命周期和页面的生命周期详细介绍

微信小程序 生命周期和页面的生命周期详解: 1.小程序的生命周期--App.js App() 必须在 app.js 中注册,且不能注册多个.所以App()方法在一个小程序中有且仅有一个. App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等.先上代码: App({ onLaunch: function () { console.log('App onLaunch'); }, onShow:function (){ console.log('App onS

Java 线程的生命周期详细介绍及实例代码

当线程被创建并启动之后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在其生命周期中,要经过"新建(New)"."就绪(Runnable)"."运行(Running')"."阻塞(Blocked)"和"死亡(Dead)"五种状态.线程在创建之后,不可能一直霸占着CPU独立运行,需要在多个线程之间切换,所以大部分时间处于运行.阻塞之间切换.  一.线程的状态 线程的存在有几种不同的状态,如下: New

Android开发之activity的生命周期详解

本文实例讲述了Android activity的生命周期.分享给大家供大家参考,具体如下: activity类处于android.app包中,继承体系如下: 1.Java.lang.Object 2.android.content.Context 3.android.app.ApplicationContext 4.android.app.Activity activity是单独的,用于处理用户操作.几乎所有的activity都要和用户打交道,所以activity类创建了一个窗口,开发人员可以通