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

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日

相关文章

  • Java多线程编程详细解释

    Java多线程编程详细解释 简介 Java中的多线程编程是一种同时执行多个线程的方式,它可以提高程序性能和资源利用率。本文将详细介绍Java多线程编程,让你能够了解创建和管理线程的方法,以及如何避免线程安全问题。 创建线程的方法 Java中有两种创建线程的方法: 方法一:继承Thread类 class MyThread extends Thread { pu…

    other 2023年6月27日
    00
  • 在mac中怎么显示隐藏文件夹

    在mac中如何显示隐藏文件夹 macOS系统中,有一些系统文件夹是默认被隐藏起来的,例如.bash_profile、Library等。这是为了保护系统文件不被误操作删除,但对于一些高级用户来说,这些隐藏文件确实是需要经常访问的,那么该如何在mac中显示这些隐藏文件夹呢? 方法一:使用终端命令 在终端中输入以下命令,可以显示所有隐藏的文件夹和文件: defau…

    其他 2023年3月29日
    00
  • vue3中封装Axios请求及在组件中使用详解

    一、前言 在Vue项目中,我们经常会用到Axios来进行数据交互。Vue3在新特性和性能上都进行了优化和改进,所以我们也需要在封装Axios请求和使用Axios时做相应的调整。 二、封装Axios请求 我们在Vue项目中经常用到Axios,并且需要统一处理一些请求和响应的拦截器,这时我们可以封装一个Axios请求工具,以提高代码的复用性和可维护性。 1.安装…

    other 2023年6月25日
    00
  • uniapp引入支付宝原生扫码插件步骤详解

    详细讲解“uniapp引入支付宝原生扫码插件步骤详解” 在uniapp中引入支付宝原生扫码插件可以实现扫码支付功能。以下是详细的步骤: 步骤一:下载支付宝原生扫码插件 首先,你需要下载支付宝原生扫码插件。可以在支付宝开放平台的开发者文档中找到并下载该插件。 步骤二:将插件文件放置在uniapp项目中 将下载的支付宝原生扫码插件文件(通常是一个.zip文件)解…

    other 2023年10月13日
    00
  • 运维监控利器nagios之:nagios配置详解

    运维监控利器nagios之:nagios配置详解 什么是nagios? Nagios是一款开源的网络监控系统,用于实时监控网络设备、应用程序、主机等资源。Nagios的核心是监控引擎,其功 能实现在各种插件中。Nagios不仅可以进行实时监控并报警,还可以记录并输出监控数据,方便进行网络资源性能评估。 nagios配置详解 安装和配置 在安装Nagios之前…

    其他 2023年3月28日
    00
  • sqlserver中含有某字符串

    当然,我很乐意为您提供有关“SQL Server中含有某字符串”的完整攻略。以下是详细的步骤和两个示例: 1 SQL Server中含有某字符串的方法 在SQL Server中,您可以使用LIKE运算符和通配符来查找含某个字符串的值。LIKE运算符用于比较一个字符串与另一个字符串是否相似。通配符用于匹配一个字符串中的任字符。 以下是使用LIKE运算符和通配符…

    other 2023年5月6日
    00
  • [jquery]将当前时间转换成yyyymmdd格式

    [jQuery] 将当前时间转换成 yyyymmdd 格式的完整攻略 在 jQuery 中,可以使用 JavaScript 的 Date 对象来获取当前时间,并使用一些方法将其转换为指定格式的字符串。本文将为您提供一份将当前时间转换成 yyyymmdd 格式的完整攻略,包括使用方法、操作步骤和两个示例说明。 使用方法 使用 jQuery 将当前时间转换成 y…

    other 2023年5月5日
    00
  • C++实战之二进制数据处理与封装

    C++实战之二进制数据处理与封装 本文主要介绍C++中二进制数据的处理与封装的相关知识,包括二进制文件处理、封装、读写二进制数据等方面。 一、二进制文件处理 打开二进制文件 #include <iostream> #include <fstream> using namespace std; int main() { //打开二进制文…

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