Android12四大组件之Activity生命周期变化详解

yizhihongxing

Android12四大组件之Activity生命周期变化详解

背景介绍

Android12的发布对于开发者而言有很多值得注意的变化,其中重要的一项就是对于Activity生命周期的变化。在这篇文章中,我们将详细讲解Android12中Activity生命周期的变化。

生命周期变化

在Android12中,Activity的生命周期发生了变化。变化主要涉及了以下几个方面:

  1. onPause()onStop()的调用时机发生了变化。
  2. 新增了onTrimMemory()方法。

下面我们详细讲解一下这些变化。

onPause()onStop()的调用时机变化

在Android12之前,onPause()onStop()是有明确调用顺序的,即先调用onPause()再调用onStop()。在Android12中,这种调用的顺序发生了变化。

具体而言,在Android12中,当一个Activity即将进入到后台时,先调用onStop()方法,然后再调用onPause()方法。

这种变化可能会对Activity的开发与管理带来一些挑战。但是,如果我们根据官方文档规范地实现了相应的回调方法,就可以避免因为生命周期的变化而导致的问题。

新增了onTrimMemory()方法

在Android12中,新增了onTrimMemory()方法,这个方法会在系统内存不足时被调用。

这个方法的具体使用方式可以参考官方文档。在这里,我们简单介绍一下这个方法的几个取值:

  • TRIM_MEMORY_RUNNING_MODERATE:表示应用正在运行,但是系统内存不足。
  • TRIM_MEMORY_RUNNING_LOW:表示应用正在运行,并且系统内存非常低。
  • TRIM_MEMORY_RUNNING_CRITICAL:表示应用正在运行,并且系统内存极度不足。

我们可以根据这些取值,对我们的应用程序进行相应的内存调整,以确保应用在内存不足时能够正常运行。

示例说明

在这里,我提供两个示例,以帮助大家更好地理解Android12中Activity生命周期的变化。

示例1:如何针对变化进行适配

假设我们有一个Activity,它需要在后台运行,但是又需要在获得焦点时实时更新数据。

在Android12之前,我们只需要按照如下方法实现Activity的生命周期即可:

@Override
protected void onStop() {
    super.onStop();
    // 停止后台服务
}

@Override
protected void onResume() {
    super.onResume();
    // 更新数据
}

但是,在Android12中,由于onPause()onStop()的调用顺序发生了变化,如果我们还是按照上述方法实现,可能会导致后台服务无法正确停止,从而导致数据更新不正常。

因此,在Android12中,我们需要做如下修改:

@Override
protected void onPause() {
    super.onPause();
    // 停止后台服务
}

@Override
protected void onStop() {
    super.onStop();
    // 更新数据
}

这样,无论是在Android12还是之前的版本中,我们的Activity都可以正常运行。

示例2:如何使用onTrimMemory()方法

假设我们有一个图片处理应用,该应用需要时刻保持足够的内存以提供更好的处理效果。

为了实现这个要求,我们需要监听系统内存不足的情况,并对我们的应用进行相应的内存调整。

在Android12中,我们可以使用onTrimMemory()方法来实现这个要求。具体而言,我们可以按照如下方法实现:

@Override
public void onTrimMemory(int level) {
    switch (level) {
        case ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE:
            // 释放一些缓存,以保证应用的正常运行
            break;
        case ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW:
            // 释放一些缓存,以保证应用的正常运行
            break;
        case ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL:
            // 释放大量缓存,以保证应用的正常运行
            break;
    }
}

这样,当系统内存不足时,我们的应用就可以自动释放缓存,以保证应用的正常运行。

总结

通过本文的介绍,我们可以了解到在Android12中Activity生命周期的变化,以及如何进行相关的开发工作。如果我们根据官方文档规范地实现了相应的回调方法,就可以避免因为生命周期的变化而导致的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android12四大组件之Activity生命周期变化详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 美团在哪里查看版本号 美团查看版本号教程

    美团在哪里查看版本号 – 美团查看版本号教程 如果你想查看美团应用的版本号,可以按照以下步骤进行操作: 打开美团应用:在你的手机上找到并点击美团应用的图标,以打开应用。 进入设置页面:在美团应用的主界面上,通常会有一个菜单按钮或者一个用户头像,点击它以打开设置页面。 查找版本号:在设置页面中,你需要找到一个关于应用的选项,通常会被称为“关于”、“版本信息”或…

    other 2023年8月3日
    00
  • 教你用Uniapp实现微信小程序的GPS定位打卡

    以下是详细的攻略: 教你用Uniapp实现微信小程序的GPS定位打卡 一、前置知识准备 在开始实现GPS定位打卡之前,需要具备以下知识: Uniapp开发基础知识 微信小程序开发基础知识 GPS相关知识 如果您还不了解以上知识,请先学习相关基础知识。 二、步骤 1. 获取用户当前位置信息 在Uniapp中,可以使用uni.getLocation()方法获取用…

    other 2023年6月20日
    00
  • Java中如何获取文件的上级目录

    获取Java的文件上级目录可以通过File类的getParent()方法来实现,具体步骤如下: 首先创建File对象,通过参数传入要获取上级目录的文件路径或文件对象。 File file = new File("C:\\Users\\Documents\\test.txt"); 调用File对象的getParent()方法,获取文件的上级…

    other 2023年6月27日
    00
  • 分享面试官常用16个c/c++面试题

    分享面试官常用16个C/C++面试题攻略 在C/C++面试中,经常会涉及一些基本的数据结构、算法、指针等等的基本原理。下面是面试官常用的16个C/C++面试题,介绍一下如何准备和应对这些问题。 1. 什么是指针? 指针是一个特殊的变量,它可以保存变量的地址,从而让程序员操作内存中的数据。 2. 指针和数组有什么关系? 指针和数组非常类似,实际上数组名就是一个…

    other 2023年6月26日
    00
  • python语法学习之super(),继承与派生

    Python语法学习之super(),继承与派生 1. 继承与派生 在面向对象编程中,类可以通过继承来获得其他类的属性和方法。一个类继承自另一个类,叫做子类(派生类),被继承的类叫做父类(基类)。子类可以从父类继承属性和方法,同时还可以自定义自己的属性和方法。 在Python中,使用class语句定义一个类,其中class后面紧跟着类名。如果想让一个类继承另…

    other 2023年6月26日
    00
  • 详解C++中单继承与多继承的使用

    详解C++中单继承与多继承的使用 C++中继承是面向对象编程中非常重要的一个特性,它允许我们创建一个类继承另一个类的属性和方法。C++中继承可以分为单继承与多继承两种。 单继承 单继承是指一个类只能继承一个基类,示例如下: class Animal{ public: void Eat(){cout<<"Animal Eat."…

    other 2023年6月26日
    00
  • js的创建文件和write

    js的创建文件和write JavaScript是一种常用的脚本语言,常常用于web开发中。在web开发中,我们需要用到很多操作文件的功能,比如创建文件或写入文件内容。在JavaScript中,如何实现这些操作呢?本文将介绍如何使用JavaScript实现创建文件和写入文件内容的功能。 创建文件 创建文件的方式有很多种,其中一种常用的方式是通过浏览器的Fil…

    其他 2023年3月28日
    00
  • python 面向对象之class和封装

    Python 面向对象之 class 和封装 Python 是一种面向对象的编程语言,使用面向对象的思想可以更好地组织和管理代码,提高代码的可维护性和可复用性。在 Python 中,class 是面向对象的重要组成部分,而封装则是实现面向对象的重要机制之一。 class class 是 Python 中面向对象编程的基础组成部分,可以通过 class 来定义…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部