首页 > 其他分享 >安卓低机型卡顿分析以优化方案

安卓低机型卡顿分析以优化方案

时间:2024-03-19 17:55:56浏览次数:29  
标签:机型 占用 正文 Number H5 内存 卡顿 安卓低

当前状况

  • 安装低端机型H5页面可能存在丢帧问题

丢帧卡顿可能原因分析

现象分析

  • 呈现速度缓慢: 在呈现速度缓慢的帧数较多的页面,当超过50%的帧呈现时间超过16ms毫秒时,用户感官明显卡顿。
  • 帧冻结的绘制耗时超过700ms,为严重卡顿问题。
  • 卡顿忽略FPS<=2的页面:因为人的视觉暂留100400ms,即FPS在2.510之间时,所以当FPS低于3时,人眼看到的并不是连续动作,即使有丢帧现象,也不会察觉。

具体问题分析

  • 当前程序运行CPU运行过高
  • 当前程序运行内存占用过高

定位问题

当前情况分析

  • 使用Android官方提供的dumpsys工具进行分析
    • 执行: adb shell dumpsys gfxinfo com.sohu.newsclient
    • 详细正文数据分析
Stats since: 29087419659040ns
Total frames rendered: 1771 : 本次dump收集了1771帧信息
Janky frames: 776 (43.82%) : 1711帧中有776帧超过16ms, 卡顿概率为: 43.8%
50th percentile: 14ms
90th percentile: 28ms
95th percentile: 57ms
99th percentile: 350ms
Number Missed Vsync: 60 : 垂直同步失败的帧
Number High input latency: 1533 : 处理input超市的帧
Number Slow UI thread: 96 : 因UI线程上的工作导致超时值
Number Slow bitmap uploads: 1 : 因bitmap的加载耗时的帧数
Number Slow issue draw commands: 77 : 因绘制导致耗时的帧数
Number Frame deadline missed: 120
  • Janky frames 并不代表用户视觉上的,显示在屏幕上的丢帧率,但是它可以代表有问题的帧率.

  • 通过安卓组掉帧工具分析

    • 可通过掉帧发生时, 具体的执行函数情况分析
    • 结果: 未发现在安卓掉帧过程中有webview函数执行

内存情况分析

分析真实内存情况

  • 使用Android中自带的Profile工具内存分析

正常打开正文页, 在低端手机中运行情况分析

  • 图1
  • 数据发现:
    • app heap:占用大部分内存
    • image heap: 照用一部分内存
  • 在app heap中"com.baidu.mobads.container.util.b"占用了大部分的内存
  • 图2
  • 经过山总查证, 次部分是广告占用了大部分内存.
  • 仔细论证内存占用关系:
  • 图3
  • 正文页运行占用内存分别如下
    • Total: 373.M
    • Java: 38.7M - Java堆内存的使用量。Java堆是Java虚拟机中用于存储对象实例的一部分内存空间
    • Native: 103.M - 应用程序通过本地方法(Native Method)分配的内存量。本地方法是使用C、C++或其他本地语言编写的代码,在Android开发中,通常用来执行一些高性能或者系统相关的操作。
    • Graphics: 109.7M - 用于绘制图形和UI元素的内存量。包括位图、画布等图形相关的资源。
    • Stack: 7.3M - 程序的调用堆栈(Call Stack)所占用的内存量。调用堆栈用于跟踪当前执行线程的方法调用顺序。
    • Code: 53.2M - 应用程序加载的代码的内存量。包括应用程序的可执行代码、库文件和其他相关的代码资源。
    • Other: 61.2M - 包括一些不容易归类的内存分配,例如一些系统资源、缓存或者其他一些不属于前述类别的内存使用情况。
  • 结论: Native中的运行占用的大部分内存
  • 对比空正文页面运行结果
  • 图4
    • Total: 348.5M
    • Java: 37M
    • Native: 126M
    • Graphics: 49.8M
    • Stack: 6.8M
    • Code: 48.5M
    • Others: 80.3M
  • 对比结论: 正文和推荐专题, 渲染评论等占用内存: 大概50M作用.

正文内存查看

  • 正文正常加载内存
  • 图5
  • 页面占用内存7.4M
  • 去掉正文加载内存
  • 图6
  • 页面占用1.8M
  • 结论: H5占用内存内存为5.5M左右

滚动时内存变换

  • 滚动时内存变化来自GPU渲染占用的内存变化

结论

  • 正文H5页面渲染, 大概占用内存30M作用
  • 正文H5页面正文部分运行占用内存5M作用
  • H5未占用大量内存, 建议: 每次合板后, 检测H5占用内存

网络资料卡顿优化建议

  • 布局优化
    • 通过减少冗余或者嵌套布局来降低视图层次结构。比如使用约束布局代替线性布局和相对布局。
    • 用 ViewStub 替代在启动过程中不需要显示的 UI 控件。
    • 使用自定义 View 替代复杂的 View 叠加。
    • 减少嵌套层次和控件个数。
    • 使用Tags:Merge标签减少布局嵌套层次,ViewStub标签推迟创建对象、延迟初始化、节省内存等。
    • 减少过度绘制
  • 减少主线程耗时操作
    • 主线程中不要直接操作数据库,数据库的操作应该放在数据库线程中完成。
    • sharepreference尽量使用apply,少使用commit,可以使用MMKV框架来代替sharepreference。
    • 网络请求回来的数据解析尽量放在子线程中,不要在主线程中进行复制的数据解析操作。
    • 不要在activity的onResume和onCreate中进行耗时操作,比如大量的计算等。
  • 列表优化
    • RecyclerView使用优化,使用DiffUtil和notifyItemDataSetChanged进行局部更新等。
  • 内存优化
    • 减少小对象的频繁分配和回收操作。
    • 被频繁调用的紧密的循环里,避免对象分配来降低GC的压力。

标签:机型,占用,正文,Number,H5,内存,卡顿,安卓低
From: https://www.cnblogs.com/zhangrunhao/p/18083581

相关文章

  • 哪种品牌的开放式耳机好?五大高评分王牌机型深度分析
    蓝牙耳机随着人们需求的在不断进行进化迭代,其形态也在不断进行开发和研究。其中,开放式蓝牙耳机作为一种与目前市场上主流无线耳机不同的产品,其市场份额虽然相对较少,但凭借着自身的高舒适性和安全性,现在开放式蓝牙耳机在数码蓝牙耳机市场中的比重也在不断增加,在这种新兴耳机种类......
  • Origin 2018非常卡顿,占用内存非常大
    以前用的Origin版本是OriginPro8.1。后来发现Origin2018的界面已经有汉化版本的了,并且也比较好用。但是安装之后发现,Origin201864bit版本运行一段时间之后,就非常卡顿,运行非常缓慢,占用内存动不动就达到好几个G,随便点一个地方要卡顿十几秒钟,甚至几十秒。在网上百度一番之后发......
  • openCV打开高清摄像头卡顿的问题
    cv2.VideoCapture(camera_number+cv2.CAP_DSHOW)是OpenCV在Windows平台下用于指定使用DirectShow作为视频捕获后端的一种方式。这里的cv2.CAP_DSHOW是一个常量,表示使用DirectShow(DirectXShow)技术来访问和控制摄像头。cv2.CAP_DSHOW参数含义:当你将cv2.CAP_DSHOW与摄像头......
  • 喜欢的音乐太多了 占用太多内存让电脑卡顿了怎么办?教你一键压缩 帮你搞定烦恼
    下载了很多音乐,发现真的太占空间了,但是又不舍得删除,该怎么办呢?其实我们可以压缩一下,对于喜欢听歌的小伙伴来说,手机里一定存了很多音乐吧,由于手机的存储空间有限,存的音乐越多,手机可用的空间就越小。为了解决手机里音频文件占用空间过大的问题,我们可以将手机里的音频进行压缩,这样......
  • zsh卡顿的问题
    zsh卡顿的问题笔者已经将zsh配置为默认的shell,但是在某些git仓库启动zsh,总是很卡顿。其原因在于:oh-my-zsh为终端增加了自动跟踪git仓库变化的能力,当检测到当前目录为git所管理时,执行了一系列的操作来获取其变化,并将信息格式化好,显示在终端上。改善措施如下:覆盖oh-my-zsh默认......
  • 【3月13日-云服务器推荐】京东云新上1年福利机型 阿里云活动页大改 选购指南 最新价格
     本文纯原创,侵权必究 《最新对比表》已更新在文章头部—腾讯云文档,文章具有时效性,请以腾讯文档为准!【腾讯文档实时更新】云服务器1分钟教会你如何选择教程https://docs.qq.com/document/DV0RCS0lGeHdMTFFV?tab=000003视频解读最新活动:【云服务器推荐】价格对比!阿里云......
  • el-tree数据量过大导致页面卡顿
    问题:el-tree等树形结构,当数据量非常大,渲染会很慢解决方案:懒加载方法:设置lazy属性为true,当点击父级节点时,再通过load方法加载子列表。优点:使用简单。缺点:不能做回显,无法展开全部节点。虚拟列表方法:使用插件或者自己实现一个虚拟列表(推荐:https://sangtian152.github.io/v......
  • 完美解决windows10磁盘占用100%并出现卡顿、假死无反应
    完美解决windows10磁盘占用100%并出现卡顿、假死无反应想必大家也跟我一样,自从用win10系统以后经常会出现这种情况:磁盘突然占用100%然后开始出现假死现象,电脑卡住,点击任何软件没反应,播放的歌曲卡住,主机硬盘灯长亮不闪,过了数秒或者数十秒又恢复正常像是没发生一样…刚开始我也是开......
  • 苹果iOS 18升级名单首曝:24款机型可升 iPhone XR不死!
    日前,媒体MacRumors得到了来自私人账号的苹果iOS18升级机型名单,该账号在iOS内部版本号方面有良好爆料记录。根据机型名单,iOS18将支持24款机型升级,与iOS17保持一致。具体机型如下:iPhone15iPhone15PlusiPhone15ProiPhone15ProMaxiPhone14iPhone14PlusiPhone......
  • 偶发的系统卡顿内存飙升导致OOM
    线上有个小程序,客户反馈的现象是偶发性的卡主没响应,前端失去连接,点其他菜单都没响应。通过查看配置的dump目录有很多的GC日志,以及生成的一个堆内存快照。JVM的配置参数大概为:-Xms512M-Xmx512M-XX:+HeapDumpOnOutOfMemoryError-XX:HeapDumpPath=D:\dump\-XX:+PrintGCDetail......