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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

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

  • Android Activity的生命周期详细介绍

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

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

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

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

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

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

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

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

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

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

    目录 返回栈 Activity 状态 1. 运行状态 2. 暂停状态 3. 停止状态 4. 销毁状态 Activity 的生存期 onCreate() onStart() onResume() onPause() onStop() onDestroy() onRestart() 完整生存期 可见生存期 前台生存期 Activity 回收处理 返回栈 Android 中的 Activity 是可以层叠的,我们每启动一个新的 Activity,就会覆盖在原有的 Activity 之上,然后点击 Ba

  • Android开发Activity的生命周期详解

    目录 前言 典型情况下的生命周期分析 前言 Android生命周期分为两部分: (1)典型情况下的生命周期. (2)异常情况下的生命周期. 典型情况下的生命周期分析 图1 Activity的生命周期图解 图2 Activity生命周期的金字塔图 (1)典型情况下的生命周期指在有用户参与的情况下,Activity所经过的生命周期的改变,正常情况下,Activity的常用生命周期有以下几种情况: onCreate():Activity启动后第一个被调用的函数,常用来进行Activity的初始化,如创

  • 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类创建了一个窗口,开发人员可以通

  • vue的生命周期钩子与父子组件的生命周期详解

    目录 vue的生命周期钩子的介绍 父子组件的生命周期 加载渲染过程 父组件更新过程 子组件更新过程 父子组件更新过程 销毁过程 代码示例 created和mounted的区别 vue的生命周期钩子的介绍 vue官网中提供的vue的生命周期钩子图 vue的生命周期可以分为8个阶段: 1.创建vue实例涉及的两个钩子 (1)beforeCreate:创建前,vue实例初始化之前调用. 此时的数据观察和事件配置都还没有准备好,而此时的实例中的data和el还是underfined状态,不可用的.Dom

  • Android入门之在子线程中调用Handler详解

    目录 简介 本章示例 前端代码 后端代码 简介 前一章我们以一个简单的小动画来解释了Handler. 这章我们会介绍在子线程里写Handler.如果是Handler写在了子线程中的话,我们就需要自己创建一个Looper对象了:创建的流程如下: 直接调用Looper.prepare()方法即可为当前线程创建Looper对象,而它的构造器会创建配套的MessageQueue; 创建Handler对象,重写handleMessage( )方法就可以处理来自于其他线程的信息了! 调用Looper.loo

  • C++入门教程之内联函数与extern "C"详解

    目录 一.   内联函数 1.概念及分析 2.特性 3.宏 二.   extern “C” 1.C++程序 2.C程序 总结 一.   内联函数 1.概念及分析 以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率. int Add(int a, int b) { int c = a + b; return c; } int main() { int ret= Add(1, 2); return 0; } 在我

  • 基于Listener监听器生命周期(详解)

    一.Listener生命周期 listener是web三大组件之一,是servlet监听器,用来监听请求,监听服务端的操作. listener分为:(都是接口类,必须实现相应方法) 1.生命周期监听器(3个) ServletContextListener requestDestroyed 在容器启动时被调用(在servlet被实例化前执行) requestInitialized 在容器销毁时调用(在servlet被销毁后执行) HttpSessionListener sessionCreated

  • 基于asp.net MVC 应用程序的生命周期(详解)

    首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢? 本文我们会详细讨论MVC应用程序一个请求的生命周期,从一个控件到另一个控件是怎样被处理的.我们还会详细介绍一下整个请求的生命周期中,用到的相关组件.因为在平常的开发过程中,我们可能知道怎样去使用MVC框架来处理相关的请求,大部分的时候我们只是在controller和action方法之间做相关的处理,对于真正内在的运行机制可能不是很了解.其实

  • Tomcat生命周期详解

    目录 引言 1.LifeCycle接口设计 1.1 生命周期的方法 1.2 相关的状态处理 2.监听器和事件的设计 3.LifecycleBase 3.1 事件处理 3.2 生命周期方法 引言 在上篇文章中我们看到了Tomcat架构中的核心组件,而且各个组件都有各自的作用,各司其职,而且相互之间也有对应的父子关系,那么这些对象的创建,调用,销毁等操作是怎么处理呢? 也就是在Tomcat中的组件的对象生命周期是怎么管理的呢?针对这个问题,在Tomcat中设计了Lifecycle接口来统一管理Tom

  • React中的生命周期详解

    目录 react生命周期 常用的生命周期 不常用的生命周 完整的生命周期图 react生命周期 函数组件无生命周期,生命周期只有类组件才拥有 生命周期函数指在某一时刻组件会自动调用并执行的函数. React每个类组件都包含生命周期方法,以便于在运行过程中特定的阶段执行这些方法. 例如:我们希望在第一次将其呈现到DOM时设置一个计时器Clock.这在React中称为“安装”.我们也想在删除由产生 的DOM时清除该计时器Clock.这在React中称为“卸载”. 一般分为:挂载.更新.卸载 常用的生

随机推荐