当前位置: 首页 > news >正文

android——关于app性能优化篇

前言

应用性能优化是指通过各种技术手段和优化策略,提高应用程序的性能,使其能够更高效地运行和响应用户操作。

下面介绍一些常见的应用性能优化方法

一、布局优化

1、减少嵌套

  • 嵌套层数尽量少,使用ConstaintLayout能使层级大大降低
  • 尽量使用RelativeLayout和LinearLayout

2、使用抽象布局标签include、merge、ViewStub

  • 布局复用,使用标签重用layout
  • 减少层级,使用标签merge替换父级布局
  • 提高显示速度,使用ViewStub延迟显示

***注意:***使用wrap_content,会增加measure计算成本;

二、内存优化

及时释放不再使用的对象,避免内存泄漏;合理使用内存缓存,例如使用 LruCache 进行图片缓存;避免频繁的对象创建和销毁。

可以从两方面入手:内存溢出和内存泄漏
1.内存溢出的解决方案:

  1. 修改JVM启动参数,直接增加内存 (-Xms –Xms 参数一定不要忘记加)
  2. 检查错误日志查看 OutOfMemory 错误前是否有其他异常或错误
  3. 对代码进行分步运行分析,找出可能发生溢出的位置

重点排查一下几点:
一、检查是否一次获取大量数据的查询,一般来说,一次获取十万条以上的记录到内存,就可能产生内存溢出.所以大家在开发的时候,需要考虑如果上线后需要获取大量数据,增加预防次问题,对此建议查询尽量使用分析查询

二、检查代码是否有死循环或递归调用

三、检查是否有大量循环重复产生新对象实体

四、检查List Map等集合对象是否使用完后,未清除的问题,List Map等集合对象始终会有对对象的引用,这样的对象便不会被GC回收

2.内存泄漏解决方案:
android常见内存泄漏主要有以下几类:

  1. Handler 引起的内存泄漏
  2. 单例模式引起的内存泄漏
  3. 非静态内部类创建静态实例引起的内存泄漏
  4. 非静态匿名内部类引起的内存泄漏
  5. 注册/反注册未成对使用引起的内存泄漏
  6. 资源对象没有关闭引起的内存泄漏
  7. 集合对象没有及时清理引起的内存泄漏

三、App瘦身优化

可优化的地方有:
1、lint使用
采用lint工具,删除了大量无用的资源。有一定作用。Android studio集成了lint工具,检测“unused resoure“及unused declaration等。这里我们使用lint检测了无用的资源文件。

2、其他团队so库的体积减少,作用明显著,尤其类似于百度地图,直播软件

3、代码冗余部分:效果非常有限,你再减少也少不了几kb

4、使用图片压缩工具,有一定作用
Google推荐图片压缩工具:https://developers.google.com/speed/docs/insights/OptimizeImages,
市面上有许多工具可用来对JPEG和PNG文件执行进一步的无损压缩,且不会对图片质量造成任何影响。对于JPEG文件,我们建议您使用jpegtran或jpegoptim(仅适用于Linux;使用–strip-all选项运行)。对于PNG文件,我们建议使用OptiPNG或PNGOUT。

5、H5页面,作用明显,而且H5适配非常简单啊

6、支持插件so,插件支持网络加载so及更新原则,作用明显

7、代码混淆,jar包资源混淆、
8、TinyPng压缩图片

四、绘制优化

避免过度绘制,减少不必要的绘制操作;使用硬件加速来加快绘制速度;避免频繁地请求布局和绘制。

五、网络优化

合理使用网络请求,避免不必要的请求;使用异步任务或线程池来处理网络请求;对图片进行压缩和缩放,减小网络传输的数据量

六、数据库优化

合理使用数据库操作,避免频繁的数据库读写操作;使用合适的数据库查询语句,优化数据库查询速度。

七、代码优化

  1. 减少方法的调用次数和计算量;避免在主线程中进行耗时操作,使用异步任务或线程池来处理耗时操作;合理使用缓存,减少对资源的重复加载。
  2. 减少冗余代码、简化算法、优化循环和递归等。可以使用工具进行代码分析,找出潜在的性能问题并进行优化。

八、APK 文件优化

使用 ProGuard 来混淆和压缩 APK 文件;使用 App Bundle 来优化应用的体积。

九、动画优化

避免频繁的动画操作,减少动画帧率的消耗;使用属性动画来进行流畅的动画操作。

十、响应性能优化

减少界面卡顿现象,避免在主线程中进行耗时操作;合理使用线程池、消息队列等机制,提高界面的响应速度。

相关文章:

android——关于app性能优化篇

前言 应用性能优化是指通过各种技术手段和优化策略,提高应用程序的性能,使其能够更高效地运行和响应用户操作。 下面介绍一些常见的应用性能优化方法 一、布局优化 1、减少嵌套 嵌套层数尽量少,使用ConstaintLayout能使层级大大降低尽量使…...

单链表经典算法LeetCode--203.移除链表元素(两种方法解)

1.链接:. - 力扣(LeetCode)【点击即可跳转】 分析此题提供两种思路: 1.遍历原链表,将值为val的节点释放掉(双指针法) 定义一个pcur指针指向头节点,定义一个prev指针指向NULL 需要注…...

MySQL—子查询

目录 ▐ 子查询概述 ▐ 准备工作 ▐ 标量子查询 ▐ 列子查询 ▐ 表子查询 ▐ 多信息嵌套 ▐ 子查询概述 • 子查询也称嵌套查询,即在一个查询语句中又出现了查询语句 • 子查询可以出现在from 后面 或where后面 • 出现在 from 后称表子查询,结…...

ffmpeg 读取流报错: Non-monotonous DTS in output stream

在处理媒体文件时,我们可能会遇到各种错误,其中之一就是“Non-monotonous DTS in output stream 0:1; previous: 36963866, current: 36611997; changing to 36963867. This may result in incorrect timestamps in the output file.”这个错误通常发生在…...

yo!这里是socket网络编程相关介绍

目录 前言 基本概念 源ip&&目的ip 源端口号&&目的端口号 udp&&tcp初识 socket编程 网络字节序 socket常见接口 socket bind listen accept connect 地址转换函数 字符串转in_addr in_addr转字符串 套接字读写函数 recvfrom&&a…...

polars学习-03 数据类型转换

背景 polars学习系列文章,第3篇 数据类型转换。 该系列文章会分享到github,大家可以去下载jupyter文件 仓库地址:https://github.com/DataShare-duo/polars_learn 小编运行环境 import sysprint(python 版本:,sys.version.spli…...

IDC 权威认可!Aloudata 入选金融领域中数据管理分析服务最佳实践案例

近日,国际知名数据咨询机构 IDC 重磅发布了《IDC PeerScape:金融领域中数据管理分析服务最佳实践案例》报告,Aloudata 与招商银行联合打造的 DDH 数据研发运维一体化平台成功入选,Aloudata 的技术、产品实力,以及在金融…...

RSA与AES算法比较及应用场景推荐

摘要:在现代加密通信中,RSA算法和AES算法被广泛应用。RSA算法是一种非对称加密算法,而AES算法是一种对称加密算法。本文将对比分析这两种算法的原理、性能及适用场景,并给出相应的推荐建议。 一、RSA算法简介 RSA算法&#xff0…...

揭秘 HTTP 代理:增强在线活动的安全性和匿名性

HTTP 代理在保护您的在线隐私、增强安全性以及允许访问受限内容方面发挥着关键作用。了解 HTTP 代理的工作原理以及如何有效地利用它们可以让您掌控自己的在线状态和浏览体验。让我们深入研究 HTTP 代理的世界,探索它们的优势、应用程序以及最大化其效用的最佳实践。…...

【经验】mysql冷热数据分离

使用mysql存储时,为了提升数据的查询效率,降低磁盘存储压力等,我们常常使用"冷热数据分离"分离的方案。即,将数据从所谓的“热表”(即经常有写入和查询操作的活跃表)迁移到“冷表”(用…...

【机器学习-06】Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...

蓝桥杯国赛每日一题:日志统计(双指针)

题目描述: 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N行。 其中每一行的格式是: ts id 表示在 ts时刻编号 id 的帖子收到一个”赞”。 现在小明想统计有哪些帖子曾经是”热帖”。 如果一个帖子曾在任意一个长…...

佛山MES公司(盈致mes系统服务商)助力企业实现智能制造

佛山是中国制造业著名的城市之一,拥有众多制造企业。随着科技的不断发展和智能制造的兴起,越来越多的企业开始意识到数字化生产管理的重要性,MES制造执行系统作为智能制造的关键技术之一,受到了越来越多企业的关注和应用。 在佛山…...

算法设计课第五周(贪心法实现活动选择问题)

目录 一、【实验目的】 二、【实验内容】 三、实验源代码 一、【实验目的】 (1)熟悉贪心法的设计思想 (2)理解贪心法的最优解与正确性证明之间的关系 (3)比较活动选择的各种“贪心”策略,…...

Ubuntu20.04右键打不开终端

今天用virtualbox安装了ubuntu20.04 问题:右键打开终端,怎么也打开不了! 点了也没反应,或者鼠标转小圈圈,然后也没有反应… 解决方法: 1、Ctrl Alt F6 先切换到终端访问界面 mac电脑 Ctrl Alt F6 …...

XML元素

XML 元素是XML文档中的基本组成单位&#xff0c;它由开始标签、结束标签和内容组成&#xff0c;格式如下&#xff1a; <element>content</element>常见的XML元素包括&#xff1a; 根元素&#xff08;Root Element&#xff09;&#xff1a;XML文档中的最外层元素&…...

融入新科技的SLM27211系列 120V, 3A/4.5A高低边高频门极驱动器兼容UCC27284,MAX15013A

SLM27211是高低边高频门极驱动器&#xff0c;集成了120V的自举二极管&#xff0c;支持高频大电流的输出&#xff0c;可在8V~17V的宽电压范围内驱动MOSFET&#xff0c;独立的高、低边驱动以方便控制&#xff0c;可用于半桥、全桥、双管正激和有源钳位正激等拓。有极好的开通、关…...

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 文章目录 代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯理论基础一、常规题目二、解题步骤…...

CSS拟物按钮

<div class"btn">F</div>.btn {margin: 150px 0 0 150px;display: flex;justify-content: center;align-items: center;width: 100px;height: 100px;background-color: #fff;border-radius: 20px;font-size: 50px;color: #333;/* 禁止选中文本 */user-se…...

websevere服务器从零搭建到上线(三)|IO多路复用小总结和服务器的基础框架

文章目录 epollselect和poll的优缺点epoll的原理以及优势epoll 好的网络服务器设计Reactor模型图解Reactor muduo库的Multiple Reactors模型 epoll select和poll的优缺点 1、单个进程能够监视的文件描述符的数量存在最大限制&#xff0c;通常是1024&#xff0c;当然可以更改数…...

4步轻松搞定Windows系统优化:Win11Debloat让你的电脑重获新生

4步轻松搞定Windows系统优化&#xff1a;Win11Debloat让你的电脑重获新生 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter…...

AI大模型产品经理零基础到进阶学习路线图,非常详细收藏我这一篇就够了

AI产品经理区别于普通产品经理的地方&#xff0c;不止在懂得AI算法&#xff0c;更重要的是具有AI思维。 人工智能产品设计要以操作极度简单为标准&#xff0c;但是前端的简单代表后端的复杂&#xff0c;系统越复杂&#xff0c;才能越智能。 同样&#xff0c;人工智能的发展依…...

比特币钱包恢复工具btcrecover:从原理到实践的开源解决方案

比特币钱包恢复工具btcrecover&#xff1a;从原理到实践的开源解决方案 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance in tryi…...

PROJECT MOGFACE自动化办公助手:集成Python脚本处理Excel与生成报告

PROJECT MOGFACE自动化办公助手&#xff1a;告别重复劳动&#xff0c;让报告自己“写”自己 你是不是也受够了每周、每月那些格式固定的数据报告&#xff1f;从一堆Excel表格里复制粘贴数据&#xff0c;再绞尽脑汁组织语言&#xff0c;最后排版成一份像样的文档。这个过程枯燥…...

费雪的竞争优势分析框架

费雪的竞争优势分析框架 关键词:费雪竞争优势分析框架、企业竞争优势、财务分析、行业分析、企业战略 摘要:本文深入探讨了费雪的竞争优势分析框架。该框架是评估企业竞争力的重要工具,通过多维度的分析帮助投资者和企业管理者判断企业在市场中的地位和发展潜力。文章首先介…...

N8N不只是工作流工具:手把手教你把它变成双向MCP网关,连接百度地图和AI Agent

N8N架构实战&#xff1a;构建双向MCP网关连接百度地图与AI Agent生态 在AI Agent技术栈中&#xff0c;协议桥接能力正成为系统设计的核心挑战。当Claude需要调用地图服务、Cursor尝试接入CRM数据时&#xff0c;传统API集成方式往往需要编写大量适配代码。而N8N通过独特的双向MC…...

SYSU-MM01跨模态行人重识别:Python评估实战指南

1. SYSU-MM01数据集与跨模态行人重识别基础 如果你正在研究行人重识别&#xff08;ReID&#xff09;&#xff0c;尤其是跨模态场景下的挑战&#xff0c;SYSU-MM01绝对是一个绕不开的基准数据集。这个由中山大学发布的权威数据集&#xff0c;最大的特点就是同时包含了可见光&…...

TFT LCD屏幕硬件解析:从XPT2046触摸屏到背光控制的完整指南

TFT LCD屏幕硬件解析&#xff1a;从XPT2046触摸屏到背光控制的完整指南 在工业控制面板和医疗设备显示屏等专业领域&#xff0c;TFT LCD屏幕凭借其高精度显示和可靠触控性能成为首选方案。不同于消费级产品的通用设计&#xff0c;专业场景下的屏幕需要工程师深入理解从触摸采样…...

保姆级教程:在STM32F103上从零移植FreeModbus V1.6(RTU模式)

保姆级教程&#xff1a;在STM32F103上从零移植FreeModbus V1.6&#xff08;RTU模式&#xff09; Modbus协议作为工业自动化领域的"普通话"&#xff0c;其开源实现FreeModbus凭借轻量级和可移植性成为嵌入式开发者的首选。本文将手把手带你在STM32F103C8T6开发板上完成…...

构建语音搜索引擎:FireRedASR Pro与Elasticsearch整合实践

构建语音搜索引擎&#xff1a;FireRedASR Pro与Elasticsearch整合实践 你有没有想过&#xff0c;对着手机说句话&#xff0c;就能从海量文档里精准找到你想要的信息&#xff1f;比如&#xff0c;在公司的知识库里&#xff0c;直接问“上季度华东区的销售数据报告在哪&#xff…...