Android低内存设备系统优化

news2024/9/25 19:26:04

切记,所有的优化都遵循一条准则:

        空间换时间,时间换空间。

一、前言

        我们为什么会觉得卡顿、不流畅?

        卡顿等性能问题的最主要根源都是因为渲染性能,Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。

        

        如果你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,这样就发生了丢帧现象。那么用户在32ms内看到的会是同一帧画面,在视觉上就会感到卡顿、不流畅。

        

        然而造成Android系统卡顿的原因有很多,主要包括以下三大类:

流程执行异常、系统负载异常、编译引起卡顿性能问题,所以今天分析一下系统负载异常中的低内存引起卡顿

二、理论分析

        我们都知道内存是一个重要的系统公共资源,系统内任何进程的正常运行都需要消耗一定的内存资源。一般来讲设备的RAM硬件物理内存的大小是固定且有限的,而系统内运行的所有进程都需要共享这些有限内存资源。如何用有限的内存资源去满足系统各个应用进程无限的需求,这就涉及到一个系统内存管理的逻辑。这是一个复杂的问题,几乎贯穿了整个Android系统的各个层级。从Linux内核到Art虚拟机,再到Framework框架,甚至到APP应用,都会有各自的内存管理的策略。

        所以合理的内存的分配与管理无论对系统和应用来讲都至关重要。因为内存问题既能引发稳定性问题,也能引发卡顿性能问题。下面我们分别来分析一下:

2.1内存引起的稳定性问题:

        因为系统总的内存资源是有限的,为了防止单个应用进程无限制的占用内存资源,Android系统设计了很多机制来遏制这种情况的产生。比如在虚拟机层面,谷歌设计对每个应用进程占用的DalvikHeap的内存大小做出了限制,超过一定的阈值,就会触发OutOfMemeory(OOM)的异常,导致应用进程崩溃。此外Android系统还引入了lmkd低内存守护机制,当系统总的可用内存低于一定的阈值,就会按照进程优先级,将占用内存比较大的应用进程杀掉。

        32位的应用虚拟内存的寻址空间最大为4G,当应用进程的虚拟内存占用超过4G时,就无法继续为其分配内存,产生OOM类型的报错,出现应用崩溃或黑屏等问题。

        另外Android系统基于Linux内核,也绩承了Linux系统对应用进程的相关限制。如果应用进程中开启的线程过多(每创建一个空线程也会有一定的内存开销),超过/proc/sys/kernel/threads-max中定义的上限,也会报出OOM异常导致应用进程崩溃;再比如应用进程中打开的文件句柄过多,超过/proc/pid/limits节点中的定义上限,也会报出OOM异常导致应用进程崩溃。如下图所示:

2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

android13顶部状态栏里面调节背光 背景闪烁问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码分析 4.代码修改 5.彩蛋 1.前言 android13顶部状态栏里面调节背光, 背景闪烁问题,会出现画面不全问题,如下图 2.问题分析 这里看起来是由于隐藏的时候,界面显示是一个渐变的隐藏,但是后面的背景又是…

NVDLA专题12:具体模块介绍——LUT Programming

LUT编程 LUT是NVDLA中SDP/CDP的实例,用于模拟神经网络中的非线性函数(Sigmoid/TanH/LRN等。)。我们知道,LUT精度高度依赖于LUT entry和曲线的斜率变化:LUT entry越多,精度越高。另一方面,曲线的斜率变化越大,越难模拟…

怎么把pdf文件转html格式?5个pdf转html方法学起来(超简单)

在信息化快速发展的今天,各种文件格式层出不穷。作为一种常见的文件格式,PDF因其跨平台的优势被广泛应用于文档的分享与存储。然而,随着网页技术的进步,越来越多的用户希望将PDF文档转换为HTML格式,以便在网页上进行编…

第三方软件测评中心分享:软件系统测试内容和作用

近年来,随着信息技术的迅猛发展,软件系统的应用范围不断扩大。保证软件质量的关键措施之一就是软件系统测试。软件系统测试是指在软件开发生命周期中,通过一系列特定的测试活动来验证和确认软件系统的性能、功能及安全性,确保软件…

使用大模型撰写移动机器人模拟器(CoppeliaSim、Gazebo、MORSE和Webots)的定量比较研究报告

使用大模型辅助阅读移动机器人模拟器(CoppeliaSim、Gazebo、MORSE和Webots)的定量比较研究报告-CSDN博客 表格总结 以下是对全文进行学术性科学总结的一系列表格: 1. 摘要表格 类别描述文章标题如何选择移动机器人模拟器:对Copp…

Spring Boot实战:使用模板方法模式优化数据处理流程

概述 在软件开发过程中,我们经常需要处理各种各样的数据,这些数据可能来自不同的源,比如数据库、文件系统或者外部API等。尽管数据来源不同,但很多情况下处理这些数据的步骤是相似的:读取数据、清洗数据、转换数据格式…

easyexcel--导入导出实现自定义格式转换

自定义格式 我们在数据库设计的时候经常会有枚举类型,如0表示普通用户,1表示VIP用户等,这在excel导入的时候,我们会填普通用户而不是0,这样就需要用到自定义格式把普通用户转换成0,我写了一个通用的抽象类…

使用 C/C++访问 MySQL

目录 准备工作 尝试链接 MySQL Client MySQL 接口介绍 准备工作 保证 MySQL 服务有效。下载MySQL开发包(可以在MySQL官网下载安装也可以在软件源安装) MySQL 开发包通常会包含一些特定的头文件和库文件。您可以检查以下常见的路径: /us…

C++ 11 的新增特性

一.列表初始化 1.1 { }初始化 在C 11 中扩大了 大括号{ } 的使用范围,我们可以使用大括号初始化内置类型对象和自定义类型对象,可以在使用时加上 等于 ,不加也可以,但是还是建议加上。 在初始化对象时我们就可以像以下方式初始化…

如何用Chatgpt制作流程图呢?

小说推文—— AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/流程图的本质,是对文本信息的整合组织,是对逻辑关系的可视化呈现。而大语言模型非常擅长从给定的…

C++策略模式:萧炎打架~

目录 策略模式步骤例子:萧炎使用技能打架给出UML图1:定义技能策略2:实现技能策略3:定义萧炎类4:萧炎遇到强劲的敌人5:战斗过程 策略模式 策略模式是一种行为设计模式,它定义了一系列算法&#…

学姐说,WebGIS面试八股文不会也得背!会!

本文全是干货,内容来一线GIS开发工程师,目前是中地数码集团、新中地GIS开发特训营高级讲师,从事GIS软件开发工作8年,拥有丰富的软件开发和项目研发经验,对webGIS、桌面GIS开发有较深研究,深谙GIS开发面试的…

玩转单例模式

目录 1. 饿汉式 2. 懒汉式 3. volatile解决指令重排序 4. 反射破坏单例模式 5. 枚举实现单例模式 6. 枚举实现单例模式的好处 7.尝试反射破坏枚举 所谓单例模式,就是是某个类的实例对象只能被创建一次,单例模式两种实现:饿汉式和懒汉…

unity程序简易框架

1. 框架基本结构 2. 单例模式基类模块 2.1 BaseManager.cs using System.Collections; using System.Collections.Generic; using UnityEngine;public class BaseManager<T> where T:new() {private static T instance;public static T GetInstance(){if (instance == …

直播预约|2024 乐鑫科技全球开发者大会亮点揭秘

时隔一年&#xff0c;2024 乐鑫科技全球开发者大会将在 9 月 3-5 日如约而至。这一年&#xff0c;人工智能给物联网领域带来了哪些变化&#xff1f;乐鑫在 AIoT 领域实现了哪些新突破&#xff1f;ESP-IDF 经过升级后增添了哪些新功能&#xff1f;ESP32-P4、ESP32-C6 迎来了怎样…

C语言指针详解-上

C语言指针详解-上 前言1.指针的基本概念1.1指针是什么1.2指针的声明与初始化1.3取地址符&和解引用符*& 运算符用于**获取变量的地址*** 运算符用于访问指针指向的值 2.指针的类型常见数据类型的指针指针与数组、字符串数组指针结构体指针函数指针二级指针void指针 3.指…

多级评论的实现,评论回复功能(两层型)

前言&#xff1a; 技术栈&#xff1a;springboot mysql mybatis 比着写一遍&#xff0c;你也一定会实现多级评论的功能&#xff0c;简单易上手&#xff01; 1.效果 整体的结构只有两层&#xff0c;但是确实现了评论回复功能 [ { "id": 2, "userId": …

让JMeter测试数据生成更容易

让JMeter测试数据生成更容易 背景&#xff1a; 在软件测试过程中&#xff0c;为了确保系统的稳定性和可靠性&#xff0c;需要对各种场景进行全面的测试。而不同的场景往往需要各种各样的测试数据&#xff0c;这些数据需要具有一定的真实性和多样性&#xff0c;以模拟实际使用…

零基础小白实现C#调用halcon dll的过程,并测试程序证明C#halcon联合开发成功

本篇将介绍零基础小白实现C#调用halcon dll的过程&#xff0c;同时这其中涉及到很多知识&#xff0c;务必将HDevelop和VisualStudio安装成功。下面我将详细阐述C#调用halcon dll的过程&#xff0c;你的点赞和评论是我一直前行的动力。 1. C#调用Halcon DLL的过程 要在C#中调用…

选择TPM管理咨询公司,这几点是关键!

在这个日新月异的商业时代&#xff0c;企业的竞争力不仅体现在产品和服务上&#xff0c;更在于其内部管理的精细化与高效化。TPM作为提升企业综合生产效率的利器&#xff0c;正逐步成为众多企业转型升级的必然选择。然而&#xff0c;如何在众多TPM管理咨询公司中慧眼识珠&#…