Android低内存设备系统优化

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

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

一、前言

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

        卡顿等性能问题的最主要根源都是因为渲染性能,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.rhkb.cn/news/407336.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Thinkphp6 反序列化漏洞分析

本文来自无问社区,更多实战内容可前往查看http://wwlib.cn/index.php/artread/artid/10431.html 版本:Thinkphp6&PHP7.3.4 TP 环境搭建利用 composer 命令进行,同时本次分析在 windows 环境下进行 composer create-project topthink/t…

Android 架构模式之 MVP

目录 架构设计的目的对 MVP 的理解代码ModelViewPresenter Android 中 MVP 的问题试吃个小李子ModelViewPresenter效果展示 大家好! 作为 Android 程序猿,你有研究过 MVP 架构吗?在开始接触 Android 那一刻起,我们就开始接触 MVC…

高频变压器无功补偿怎么做

高频变压器的无功补偿主要是为了提高功率因数、减小无功损耗、提高电源利用率。在高频电路中,由于频率较高,传统的无功补偿方法需要进行一定的调整和优化。以下是高频变压器无功补偿的一些方法和建议: 1、无功补偿电容器 高频电容器选择&…

具有手势识别的动捕设备——mHand Pro VR数据手套

数据手套是指通过手套内置的传感器,实时采集手部运动数据的动捕设备,通常被应用于虚拟仿真、虚拟现实vr交互、动画制作等领域。其中,基于惯性动作捕捉技术研发的数据手套,凭借其高性价比的优势,在市面上的应用更为广泛…

STM32G474按钮输入和点灯

在获取到工程模板后,学习某个CPU的第一步通常都是IO口操作。因此按钮输入和点灯,就是本次学习的第一个程序。先从简单入手。 和GPIO操作有关的函数如下: __HAL_RCC_GPIOA_CLK_ENABLE();//使能GPIOA时钟 __HAL_RCC_GPIOB_CLK_ENABLE();//使能GPIOB时钟 _…

深度理解指针(2)

hello各位小伙伴们,关于指针的了解我们断更了好久了,接下来这几天我会带领大家继续我们指针的学习。 目录 数组名的理解 使用指针访问一维数组 一维数组传参的本质 二级指针 指针数组 使用指针数组来模仿二维数组 数组名的理解 我们首先来看一段…

【开源社区】Elasticsearch(ES)中 exists 查询空值字段的坑

文章目录 1、概述2、使用 null_value 处理空值3、使用 exists 函数查询值为空的文档3.1 使用场景3.2 ES 中常见的空值查询方式3.3 常见误区3.4 使用 bool 查询函数查询空值字段3.5 exists 函数详解3.5.1 bool 查询的不足3.5.3 exists 的基本使用 3.6 完美方案 1、概述 本文主要…

单例模式 详解

单例模式 简介: 让类只初始化一次, 然后不同的地方都能获取到同一个实例 这是非常常用的一种模式, 系统稍微大一点基本上都会用到. 在系统中, 不同模块的总管理类都已单例模式居多 这里我们不仅使用c实现单例模式, 也会用python2实现一遍 python代码 想要看更详细的python单…

手动下载Sentinel-1卫星精密轨道数据

轨道信息对于InSAR(干涉合成孔径雷达)数据处理至关重要,因为它影响从初始图像配准到最终形变图像生成的整个过程。不准确的轨道信息会导致基线误差,这些误差会以残差条纹的形式出现在干涉图中。为了消除由轨道误差引起的系统性误差…

Swift 6.0 如何更优雅的抛出和处理特定类型的错误

概述 从 Swift 语言诞生那天儿起,它就不厌其烦一遍又一遍地向秃头码农们诉说着自己的类型安全和高雅品味。 不过遗憾的是,作为 Swift 语言中错误处理这最为重要的一环却时常让小伙伴们不得要领、满腹狐疑。 在本篇博文中,您将学到如下内容&…

基于网格尺度的上海市人口分布空间聚集特征分析与冷热点识别

在上篇文章提到了同一研究空间在不同尺度下的观察可能会带来不同的见解和发现,这次我们把尺度缩放到网格,来看网格尺度下的空间自相关性、高/低聚类,这些,因为尺度缩放到网格尺度了,全国这个行政区范围就显的太大了&am…

基于Shader实现的UGUI描边解决方案遇到的bug

原文链接:https://www.cnblogs.com/GuyaWeiren/p/9665106.html 使用这边文章介绍的描边解决方案时遇到了一些问题,就是文字的描边经常会变粗,虽然有的时候也可以正常显示描边,但是运行一会儿描边就不正常了,而且不正常…

UDP+TCP

一、UDP协议 1.recvfrom:recvform(int sockfd,void *buf,size_t len,int flags,struct sockaddr *src_addr,socklen_t *addrlen); 参数:socket的fd; 保存数据的空间地址 ; 空间大小; 默认接收方式(默认阻塞&#xf…

【案例56】安全设备导致请求被拦截

问题现象 访问相关报表 第二次访问发现有相关的连接问题 问题分析 服务器访问相关节点,发现相关节点无此问题。从客户的客户端访问缺有问题。在nclog中发现如下日志,链接被重置。 直接访问服务器无丢包现象。客户端未开防火墙。装了杀毒软件已经卸载。…

简单记录:两台服务器如何超快速互传文件/文件夹

在服务器间传输文件和文件夹是一个常见的任务,尤其是在需要同步数据或进行备份时。以下是使用 scp 命令在两台服务器之间进行文件传输的基本步骤。 服务器A 至 服务器B:文件传输指南 前提条件 确保服务器A和服务器B之间网络互通。确认您有权限访问目标…

C语言 之 整数在内存中的存储、大小端字节序和字节序的判断

文章目录 整数在内存中的存储大小端字节序和字节序判断大小端有大小端的原因高位和地位怎么区分?图例判断机器大端还是小端的例题 整数在内存中的存储 整数的2进制表示方法有三种,即 原码、反码和补码 三种表示方法均有符号位和数值位两部分&#xff0c…

微信小程序获取当前位置并自定义浮窗

1、在腾讯地图api申请key(添加微信小程序的appid)。 每个Key每日可以免费使用100次,超过次数后会导致地图不显示。可以多申请几个Key解决。WebService API | 腾讯位置服务腾讯地图开放平台为各类应用厂商和开发者提供基于腾讯地图的地理位置…

当AI成为你的私人医生,与AI“医”路同行的奇妙体验

“ 从挂号到诊疗,再到后续的健康管理,人工智能(AI)正以一种全新的方式融入我们的生活。上海市第一人民医院的创新实践,便是这一变革的生动注脚。 ” AI就医助理:从“助手”到“伙伴” 当你踏入医院大门…

猜数3次-python

题目要求: 定一个数字(1-10,随机产生,通过3次判断来猜出数字) 数字随机产生,范围1-10有三次机会猜测数字,通过3层嵌套判断实现每次猜不中会提示大了或者小了 ps:补充随机函数 imp…

Spring源码解析(34)之Spring事务回滚流程

一、前言 在上一个篇章我们主要介绍了Spring事务的运行流程,也带着一步步debug看了整个事务的运行流程,但是还是欠缺了Spring事务的回滚的流程。 在上篇也主要介绍了Spring事务的传播特性,这里还是要看一下Spring事务的传播特性,因…