Android性能优化之卡顿优化

2023-10-29

一.什么是卡顿

 APP使用起来卡顿,主要是用户在使用APP时的感知,主要表现在APP页面的刷新,滑动时的流畅度。例如用户在某个页面滑动时有明显卡住的现象就是卡顿了。开发中有一个16ms原则,即你的APP在16ms内没有更新完界面,用户就会有卡顿的感受。

二.哪些原因造成卡顿

 1.UI造成的卡顿

      (1)过于复杂的布局

      (2)过度绘制

      (3)动画

  2.主线程执行了耗时操作

  3.频繁的GC

三.怎么优化卡顿?

    1.UI卡顿优化

        (1)布局优化

           a.相同层级可实现的页面使用LineraLayout代替RelativeLayout,因为从源码中我们可以知道,

             LineraLayout在没有设置 weight属性的时候onMeasure()只执行一次,而RelativeLayout都要执行两次。

         b.复杂层级的布局可使用ConstraintLayout来减少层级,ConstraintLayout是一个非常强大的布局控件,很多相对复               杂的布局都可以使用ConstraintLayout一个层级就可以实现功能。

         c.使用merge标签:

             merge和include结合使用,可以减少布局层级,例如一个include的布局文件中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content" />

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content" />

</LinearLayout>

这里我们可以使用merge来代替LinearLayout,这样就等于减少了LinearLayout这一个层级。

 

         d.使用 ViewStub标签:

          ViewStub,是一个大小为0 ,默认不可见的控件,只有给他设置成了View.Visible或调用了它的inflate()之后才会填充布局资源,也就是说占用资源少。所以当我们有一些布局是在特定条件下才需要显示时就可以用ViewStub来减少布局的加载,比如我们最常用的空白页(即网络异常时的错误提示页面)。

      e.使用工具 Hierarchy Viewer来分析布局,查找可优化的地方。

  (2)过度绘制优化

    a.使用overdraw检测, 设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制,

      通过不同颜色来发现哪些地方过度绘制。

    b.移除不必要的background,比如我们整个页面的背景设置了白色,这样子控件如果再有是白色的就没有必要再设置背景色了。

    c.对于自定义的view要减少重复计算和绘制。

(3)动画优化

    a.有些酷炫的动画往往对性能要求比较高,所以可以采用分级方式,判断手机类型,低端手机减少动画。

 

 2.主线程耗时操作操作优化

   (1)主线程也叫UI线程主要的任务是处理用户交互、绘制界面、显示数据、消息处理等工作,如果耗时操作如请求网络数据、操作数据库、读取文件等就不能放在主线程来,可以开启子线程来操作。

 (2)使用线程池来代替单独创建子线程,因为频繁的创建和销毁线程很耗时,创建太多的子线程也会抢占主线程的CPU使用,从而导致卡顿。

3.频繁的GC优化

   (1)需要频繁操作字符串时使用 StringBuilder 。

 (2)new对象的时候要注意,尽量不要在需要频繁执行的地方New对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android性能优化之卡顿优化 的相关文章

  • CSDN 改变字体颜色

    将字体改变为红色 font color 900 我是编程ID font 设置字体颜色和字号 font face 华文行楷 color red size 5 本字体是华文行楷 红色 5号大小 font 更多字体参见 https blog cs
  • vue+element+table+render+slot

    前言 最新又回忆并且整理下之前的资料 在这里共享下把 主要是element ui框架里面对table的使用 因为element ui不可以像我们iview框架一样可以直接的在表头里面写render函数 我这里把element ui的tabl
  • Java使用EasyExcel导出数据到Excel文件,以及调用接口下载文件

    1 引入EasyExcel 依赖
  • OAM PDU

    MPLS OAM基本概念 MPLS提供一个完全不依赖于任何三层协议或二层协议的OAM机制 在MPLS的数据平面实现以下功能 1确定LSP的连通性 2 衡量网络利用率以及度量网络性能 3 在链路出现缺陷或故障时迅速进行保护倒换 以便根据与客户
  • hping3的使用

    Hping 是面向命令行的 用于生成和解析 TCP IP 协议数据包汇编 分析的开源工具 常见的应用是 扫描端口 伪造地址和洪水攻击 hping3中的参数如下 h help 显示帮助 v version 显示版本 c count 发送数据包
  • APS计划排程系统之下的MRPII、JIT、TOC三种方式对比分析

    1 生产物流计划的制订方式对比 MRPII采用的是集中式的物料计划方式 建立好产品加工程序 在电脑中确定好准确的订单需求和库存量 对各个生产单元传送生产指令 JIT利用的是看板管理控制方式 按照有限能力计划 逐道工序地倒序传递生产中的取货指
  • librecad二次开发

    1 ui 部份 1 增加主菜单 在这里插入图片描述 https img blog csdnimg cn 65e596109caf43a485505ab1b705ea94 png x oss process image watermark t
  • python 视频处理技术_Python玩转视频处理(三):从视频中提取女神片段

    在上一篇中实现了基于人脸识别提取人物片段的功能 但是在实践过程中发现 如果是一部电影 那么提取到的片段太多了 为了找女神的电影片段 还要在辣么多剪辑中苦苦手工筛选 这个不是一个优秀的程序员应该做的 经过一番实践和探索 发现了一个强大的库 叫
  • 通过pyppeteer来爬取今日头条

    import asyncio from pyppeteer import launch async def main browser await launch page await browser newPage await page se
  • ElementUI的form表单验证注意事项

    ElementUI的form表单验证注意事项 1 踩过的坑 记录一下 验证表单时一直提示必填项未填写 实际已经填写了 2 el form的正确使用流程 el form就是最外层的form表单 做验证有三个必填属性 不填写验证就会不正确 re

随机推荐

  • 烧屏现象对OLED屏幕质量的影响:如何保持画面清晰度?

    OLED Organic Light Emitting Diode 屏幕作为一种高品质 高对比度和鲜艳色彩的显示技术 越来越受到消费者的青睐 然而 一些用户可能会担心OLED屏幕烧屏的问题 本文将探讨OLED屏幕烧屏的原因 如何预防烧屏以及
  • 前端常见的面试题整理

    移动端相关 1 移动端1px边框问题的解决方案 华润集团 使用小数写px值 通过媒体查询判断设备的像素比 DRP 根据不同像素比写不同的边框大小 border border 1px solid ccc media screen and we
  • 基于传统检测算法hog+svm实现图像多分类

    直接上效果图 代码仓库和视频演示b站视频005期 到此一游7758258的个人空间 到此一游7758258个人主页 哔哩哔哩视频 代码展示 数据集在datasets文件夹下 运行01train py即可训练 训练结束后会保存模型在本地 运行
  • Layui上传下载实现

    Layui SSM上传下载文件 上传Controller 上传 RequestMapping sc ResponseBody public String sc RequestParam uploadFile MultipartFile fi
  • s20赛季服务器维护,S20赛季迎来重大更新,这些细节你了解吗?

    随着7月9号的S20赛季更新 又一个赛季落下帷幕 本应于6月30号的赛季更新不知为何推迟 好在是官方终于宣布了赛季更新消息 就让我们一起来看看新赛季有哪些改动吧 一代版本一代神 每一个版本总有一些耀眼的英雄随着机制或者装备的改善从而登上热门
  • 使用promise封装wx.request()

    1 目录结构 在根目录下创建http目录及api js文件fetch js以及http js文件 在根目录下创建env目录 创建index js配置并导出多个开发环境 module exports 开发环境 Dev BaseUrl http
  • 计算机网络实验-静态路由与默认路由配置

    一 实验目的 1 理解静态路由的含义 2 掌握路由器静态路由的配置方法 3 理解默认路由的含义 4 掌握默认路由的配置方法 二 实验仪器 1 装有Cisco Packet Tracer的Windows10计算机 三 实验原理 30 1 静态
  • uniapp对接支付宝出现的问题

    支付逻辑没问题却出现商家订单参数异常 请重新发起付款 检查发现后端传回来根本没什么问题 检查很久发现需要下载证书放在服务器上 小程序文档 支付宝文档中心
  • JS Array数组方法

    1 unshift 方法将一个或多个元素添加到数组的开头 并返回该数组的新长度 该方法修改原有数组 头部添加 原数组改变 const array1 1 2 3 返回数组长度 console log array1 unshift 4 5 5
  • 那些在一个公司死磕了 5 - 10 年的人,最后都怎么样了?

    点击上方 Java基基 选择 设为星标 做积极的人 而不是积极废人 每天 14 00 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框
  • Qt调用另一个类的ui界面以及解决the class contaning “Ui::Widget“ could not be found的方法

    调用另一个类的ui 类A调用类B的ui B必须为设计师界面类 需构造一个B类对象 A获取该对象的指针后 在A cpp中 include ui B h 该头文件是编译时自动生成的 后即可通过B的指针调用B的ui B gt ui gt push
  • python预测糖尿病_使用决策树与随机深林预测糖尿病(python)

    一 算法简介 决策树是一种树形结构 其中每一个内部节点表示在一个特征 属性 上的测试 每个分支代表一个测试输出 每个叶子节点代表一种类别 二 代码实例 使用决策树预测糖尿病 参考引用于 贪心学院 注意 需要使用如下命令安装额外两个包用于画图
  • OpenWrt 上配置允许 SSH(22)并永久生效

    要在 OpenWrt 上配置允许 SSH 端口22 并使其永久生效 您可以按照以下步骤进行操作 登录到 OpenWrt 设备的管理界面或通过 SSH 连接到设备 打开防火墙配置文件 在命令行终端中执行以下命令 vi etc config f
  • error MSB4184: 无法计算表达式

    C Program Files x86 MSBuild 12 0 bin Microsoft Common CurrentVersion targets 90 5 error MSB4184 无法计算表达式 Microsoft Build
  • 前端实现贪吃蛇小游戏-附源码详解

    前端实现贪吃蛇小游戏的详细代码和解释 首先 我们需要在 HTML 中添加一个画布元素 用于绘制游戏界面
  • Spring 版本

    Spring boot 2 4 9 spring cloud 3 0 1 alibaba 2021 1 dubbo registry address spring cloud 127 0 01 scan base packages XXX
  • PAT C入门题目-7-116 验证“哥德巴赫猜想” (20 分)(素数)

    7 116 验证 哥德巴赫猜想 20 分 数学领域著名的 哥德巴赫猜想 的大致意思是 任何一个大于2的偶数总能表示为两个素数之和 比如 24 5 19 其中5和19都是素数 本实验的任务是设计一个程序 验证20亿以内的偶数都可以分解成两个素
  • java casting意思,Java Casting方法不知道要转换的内容

    I was playing around with Java today and I noticed something weird Consider this code String foo cast hi int bar cast 1
  • 虚拟化原理以及应用(10)课堂笔记-第四章-开启第一台虚拟机

    第四章 开启第一台虚拟机 qemu kvm yum y install qemu kvm qemu kvm tools 一 使用基础管理工具qemu kvm创建第一台客户机 1 安装qemu kvm的工具包 yum y install qe
  • Android性能优化之卡顿优化

    一 什么是卡顿 APP使用起来卡顿 主要是用户在使用APP时的感知 主要表现在APP页面的刷新 滑动时的流畅度 例如用户在某个页面滑动时有明显卡住的现象就是卡顿了 开发中有一个16ms原则 即你的APP在16ms内没有更新完界面 用户就会有