全网最新:面向Android开发中的“卡顿问题及解决方法”

前言

Android开发中卡顿问题一直是个比较棘手又重要的问题,严重影响用户体验;卡顿是人的一种视觉感受,比如我们滑动界面时,如果滑动不流畅我们就会有卡顿的感觉,这种感觉我们需要有一个量化指标,在编程时如果开发的程序超过了这个指标我们认为其是卡顿的

开发app的性能目标就是保持60fps,这意味着每一帧你只有16ms≈1000/60的时间来处理所有的任务;Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps

什么是卡顿呢?

安卓APP卡顿问题,就是UI渲染过慢;如果计算跟绘制,让界面的帧率在1秒内达到60fps,APP视觉效果当然达到自然流畅;可如果在16ms内不能完成界面的渲染,占了下n个16ms的时间,相当于丢了n帧,丢帧的产生就会造成应用卡顿现象的出现,严重影响了用户体验感,这是开发者必须要重视的问题

APP中主要表现在页面的刷新,滑动时的流畅度;例如玩游戏的时候卡,或者听歌的时候画面滞帧,也就是通常人们所说的“卡”;开发者中有一个卡顿16ms原则,每一帧渲染时间不能超过16ms,应达到60帧每秒,如果UI渲染过慢,就会发生丢帧,丢帧的出现就会产生画面的不连贯性,就是卡顿

什么是过度绘制?

Overdraw(过度绘制)描述的是屏幕上的某个像素在同一帧的时间内被绘制了N次;但是我们只能看到最上层的UI,这就会导致多层次的UI界面除最上层外对用户都是不可见的,这样就会浪费大量的CPU以及GPU资源,浪费可耻

这就像我们在纸上固定区域不断图画,但是有最上层最接近你,其他层有个鬼用?

解决过度绘制

● 我们在写RecyclerView的时候,如果RecyclerView的父布局、RecyclerView、item三者的背景只要其中一个设置就可以了,没有设置背景就不会渲染,否则就会有过度绘制的情况

父布局套子布局也是尽量只设置其中一个背景,除非没办法都需要背景

● 子view一般绘制后是会覆盖父view,所以一般选择把背景设置在子view

视图的层级结构能减少就减少,层级越多绘制速度越慢

● 尽量少设置view的透明度,如果一个view设置了alpha,那他需要知道下面的view是什么内容,再绘制自己,就是过度绘制。如果是文字有透明度,可以在色号里就设置好

如何查看绘制维度

● 开发工具有Hierarchy View、Systrace、Track等

● 真机在开发者选项中有:调试GPU绘制、硬件层更新、GPU视图更新等等

界面优化

在编写Android布局时总会遇到这样或者那样的痛点,比如:

● 有些布局的在很多页面都用到了,而且样式都一样,每次用到都要复制粘贴一大段,有没有办法可以复用呢?

● 解决了问题之后,发现复用的布局外面总要额外套上一层布局,要知道布局嵌套是会影响性能的呐

● 有些布局只有用到时才会显示,但是必须提前写好,虽然设置了为invisible或gone,还是多多少少会占用内存的

首先第一点也是最重要的一点,在刚开始写布局的时候一定要提前想好和规划好,尽可能的减少层级的嵌套

往往越复杂的布局越臃肿,越容易被忽视进而出现性能问题,所以我们写布局就要知道一些技巧来展示布局

● 如果图片和文字在一起且文字不动态变的话,可以直接使用带文字的图片

移除没用的布局和控件,假设添加个背景,尽可能在已经布局上放,减少只有背景功能的控件

减少透明度的使用,假设:#55FFFFFF 和 #888888 颜色类似,建议使用后者,因为前者有Alpha,view需要至少绘制两次

去掉多余的不可见颜色背景、图片等,只保留最上层用户可见即可

减少布局层次结构,避免多层嵌套推荐使用RelativeLayout、ConstraintLayout等父类布局

基本控件LinearLayout 性能比RelativeLayout高一些,要提前根据UI想好哪个布局更合适,要有的方式,对症下药

自定义View尽可能只更新渲染局部区域,杜绝不断全部重绘

推荐使用IDE自带的Lint或者阿里代码检查插件,对于标黄警告等提示重视起来,能改的就改

除了以上,我们就要解决过度绘制,我们还可以使用抽象布局,它们分别是include、merge和ViewStub三个标签,现在我们就来认识认识它们吧

Include应该是最常用的了,其翻译是“包含”、“包括”,最佳使用就是把相同代码抽离出来成一个独立的xml文件,当你在某个布局需要使用的时候直接include进来,这样一搞,很好地起到复用布局的效果。不仅可以极大地减少代码量,想要修改的话直接改这一个xml就行了

● 它的两个主要属性:layout:必填属性, id属性

我们还可以重写宽高、边距和可见性(visibility)这些布局属性。但是一定要注意,单单重写android:layout_height或者android:layout_width是不行,必须两个同时重写才起作用

引起应用卡顿的原因

UI造成的卡顿

过度绘制:就是在同一帧情况下对同一块像素区域进行重复绘制。这样会加重GPU跟CPU的渲染压力,导致渲染时间过长

布局嵌套过多;布局嵌套过多过于复杂也会导致CPU跟GPU的渲染,计算,绘制压力

动画执行次数过多

执行耗时操作;文件读写,数据操作,较大数据初始化等较为耗时的操作阻塞线程

频繁GC;执行GC的时候,所有操作都需要暂停,等到GC结束后,才能继续执行操作。这样就可能会阻塞CPU跟GPU的渲染,计算跟绘制

UI优化

● 多余Bg移除

● ui重叠区域优化 cancas.clipRect

● 减少ui层级

● 耗时方法分析与优化

● 多样式布局采用单一rv处理

卡顿优化

Android 应用启动慢,使用时经常卡顿,是非常影响用户体验的,应该尽量避免出现。卡顿的场景有很多,按场景可以分为4类:UI 绘制、应用启动、页面跳转、事件响应,如图:

这4种卡顿场景的根本原因

界面绘制

● 主要原因是绘制的层级深、页面复杂、刷新不合理,由于这些原因导致卡顿的场景更多出现在 UI 和启动后的初始界面以及跳转到页面的绘制上。

数据处理

● 导致这种卡顿场景的原因是数据处理量太大,一般分为三种情况,一是数据在处理 UI 线程,二是数据处理占用 CPU 高,导致主线程拿不到时间片,三是内存增加导致 GC 频繁,从而引起卡顿。=

引起卡顿的原因很多,但不管怎么样的原因和场景,最终都是通过设备屏幕上显示来达到用户,归根到底就是显示有问题

影响绘制的根本原因

● 绘制任务太重,绘制一帧内容耗时太长

● 主线程太忙,根据系统传递过来的 VSYNC 信号来时还没准备好数据导致丢帧

● 绘制耗时太长,可利用工具帮助我们定位问题(这里推荐使用友盟+u-apm应用性能监控平台)

● 主线程太忙则需要注意了,主线程关键职责是处理用户交互,在屏幕上绘制像素,并进行加载显示相关的数据,所以特别需要避免任何主线程的事情,这样应用程序才能保持对用户操作的即时响应。总结起来,主线程主要做以下几个方面工作:

UI 生命周期控制

系统事件处理

消息处理

界面布局

界面绘制

界面刷新

除此之外,应该尽量避免将其他处理放在主线程中,特别复杂的数据计算和网络请求等

尾述

技术是无止境的,你需要对自己提交的每一行代码、使用的每一个工具负责,不断挖掘其底层原理,才能使自己的技术升华到更高的层面

Android 架构师之路还很漫长,与君共勉

PS:有问题欢迎指正,可以在评论区留下你的建议和感受;
欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下

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

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

相关文章

Android 卡顿调研

/ 今日科技快讯 / 近日,新华社发文评价盲盒经济称,盲盒不仅成为一个经济现象,也反映了当下中国年轻人,特别是“95后”一代的心理和生活状态。惊喜和期待的背后,“盲盒热”所带来的上瘾和赌博心理也在滋生畸形消费&…

安卓-页面卡顿-分析方法

界面卡顿影响的页面 : ListViewScrollView有动画的页面 分析步骤 打开调试开发者选项,GPU呈现模式分析如果蓝色部分比较高,说明是UI线程性能问题红色部分比较高,应该是DrawList比较复杂,这部分可能跟蓝色部分相关。目…

Android手机为何不再卡顿?性能优化才是安卓起飞关键

现在谈到挂载 Android系统的 手机,大部分人的印象早已不像前几年,几年前的安卓机那是用了一段时间就变得有点卡顿,用1年就卡的动弹不得,不得不每年都更换新机。 为什么以前会出现这种情况呢?其实主要是有些程序在运行…

Android App 反应卡顿解决方案

Android App 反应卡顿,从技术上将就是UI 渲染慢。 UI渲染是从您的应用程序生成一个框架并将其显示在屏幕上的行为。 为了确保用户与您的应用程序的交互顺利,您的应用程序应该在16ms内渲染帧数达到每秒60帧(为什么60fps?&#xff…

中文大模型评估基准:C-EVAL: A Multi-Level Multi-Discipline Chinese Evaluation Suite for Foundation Models

论文:https://arxiv.org/abs/2305.08322 网站:C-Eval: A Multi-Level Multi-Discipline Chinese Evaluation Suite for Foundation Models 一、导言 随着大语言模型的迅速发展,如何评估一个大模型的能力也成为了一个重要的话题&#xff0c…

「国际科技信息中心SCITIC论坛」从细胞、基因和人工智能,探讨智慧医疗的机遇和挑战...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 2023年3月22日,由国际科技信息中心主办,AI TIME承办的SCITIC论坛“细胞,基因和人工智能:探索医学研究的未来”完美收官。SCITIC论坛由国际科技信息中心倾力打造&a…

C-Eval:构造中文大模型的知识评估基准

作者:符尧,何俊贤 排版:宋梓瑜 来源:海外独角兽 本项目立项于 2023 年 2 月 28 日,由上海交通大学、清华大学和爱丁堡大学共同完成,发布于 2023 年 5 月 22 日,原文链接:https://yao…

GPT(Chat)原理及其应用

摘要 遥想以往,人类沟通的方式只有口头或书面文字,但现在随着科技的发展,人类的沟通方式又得到了革命性的变化,即通过聊天机器人实现人机沟通。而GPT(Chat)中文聊天机器人又是其中的一种,它可以通过技术手段来自然地与…

AI:什么是智能?

本篇文章是博主在人工智能等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在学习摘录和笔记专…

ChatGPT推荐的开源项目,到底靠不靠谱?

今天我们让ChatGPT推荐一些开源项目,看看这些项目到底靠不靠谱? 首先,我们需要明确一个概念,那就是什么是开源项目。开源项目是指代码开放、可自由使用、修改和分发的软件项目。开源项目的优点显而易见,它们免费、透明…

餐饮行业最新的经营模式——私域运营案例

疫情让许多企业发展面临巨大压力,而私域流量在这个时刻成为很多餐饮企业爱如珍宝的“救命稻草”。甚至有人预言,今年将可能是餐饮私域流量醒觉得第一年。目睹着越来越多的餐饮企业其中甚至还有餐饮大牌企业都加入私域流量中来。但好多餐饮人都不太了解私…

基于PHP的餐饮行业管理系统

第一章 绪论 1.1 系统开发背景 近年来,基于用户对网络信息传递的实时性以及高效性等方面的需求,使得信息化技术手段以及相关的产业结构得到的飞速的发展,其中最为出众的当属电商化的运营管理模式,其一经推广便受到了广泛的关注。…

【完善】微信餐厅点单小程序+后台管理系统的设计与实现(python实现)

前言 本文为完善上一篇文章餐厅点单小程序后台管理管理系统的设计与实现,旨在帮助有需要的小伙伴,更好的入门学习python3 djangovue开发的前后端分离框架。话不多说,开始我们的学习吧~ 项目介绍 本次系统设计分两大模块&#x…

餐饮门店数字化转型|餐厅管理系统小程序

餐饮行业规模非常庞大,每年都有大量公司或个体户入局,国内各类美食非常多,不同品类菜品都有大量需求,以前几乎在业的餐饮门店,只要运营得当,挣多挣少总归是有利的,也能很好的生存下去&#xff0…

【餐厅点餐平台|一】项目描述+需求分析

餐厅点餐平台导航 【餐厅点餐平台|一】项目描述需求分析 https://blog.csdn.net/weixin_46291251/article/details/126414430 【餐厅点餐平台|二】总体设计 https://blog.csdn.net/weixin_46291251/article/details/126422811 【餐厅点餐平台&#xff5…

校园外卖点餐系统——Day02【员工管理业务开发】

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…

餐道中台如何赋能餐饮零售企业?

前不久,餐道A轮融资1亿元,是近期餐饮行业信息化领域最大的一笔。这家公司融资的目的是为了加强“SaaS 业务数据双中台”系统研发。那么,这家公司是谁,为什能拿到融资,此次融资之后会朝着何处发展,为业内带来…

餐饮行业管理系统技术开发详细步骤详解

一. 项目介绍 本系统主要应用在餐饮行业,可以适用于中餐、西餐、快餐、火锅、烤肉等,主要功能分前端和后端两部分。前端主要完成就餐客户的餐厅预定及点菜环节,后端主要完成餐厅、餐桌的设置,菜品的设置等 系统分为前端和后台两…

教你如何实现门店餐饮快速裂变的解决方案

随着互联网市场的迅速发展,很多实体店受到电商行业的影响,客流量是越来越少,再加上这几年的疫情影响,实体店真的是越来越难做了特别是餐饮行业,以至于身边随处可见的门店关门、转让。难道就实体店就走向谷底了吗&#…

外卖项目01---软件开发整体介绍

目录 一、软件开发整体介绍 03 1.1软件开发流程 03 1.2角色分工 1.3软件环境 二、外卖项目介绍 04 2.1项目介绍 2.2产品原型展示 2.3技术选型 2.4功能架构 2.5项目上线后的角色分类 三、开发环境搭建 05 3.1数据库环境搭建 3.2maven项目搭建 06 四、后台登陆功…