启动查看工具总结

启动目标:2s内优秀,2-5s普通,之后的都需要优化,热启动则是1.5s-2s内

1 看下大致串联启动流程:


 App 进程在 Fork 之后,需要首先执行 bindApplication 
Application 的环境创建好之后,就开始activity的启动

Activity 的生命周期函数会在 Activity 组件创建的时候执行,包括 onStart、onCreate、onResume ,然后还要经过一次 Choreographer.doFrame 的执行(包括 measure、layout、draw,animation,input)以及 RenderThread 的初始化和第一帧任务的绘制,
再加上 SurfaceFlinger 一个 Vsync 周期的合成,应用第一帧才会真正显示

2 使用技巧:

  首先抓取systrace 查看进程是否占用率过高,过高的话,就看下线程是不是太多了,不多的话,就是系统的原因了。再看下uithread线程哪里耗时比较大的,可以考虑下面方案:

要按顺序执行,影响依次降低。

1 是否可以放到子线程

2 是否可以延时加载

3 代码里优化主线程耗时部分

4 代码里优化子线程耗时部分(cpu占用高的话,尤其明显)

5 优化内存(内存大了,影响cpu调度)

到此就结束了。

代码里优化具体比如:
循环体里面尽量不要用临时局部变量,能用局部变量的不用成员变量
尽量减少一次性初始化N多大数据量,容易造成GC,并且卡顿
采用SurfaceView在子线程刷新UI, 避免手势的处理和绘制在同一UI线程
使用增强for循环
如:Set<Object> set = new HashSet<Object>();
移位操作替代乘法

慎用shareprefercnce,因为对于同一个sp,会将整个xml文件载入内存

protobuf可以比xml省30%内存

数据库字段尽量精简,只读取所需字段

有些能用文件操作的,尽量采用文件操作,文件操作的速度比数据库的操作要快10倍左右

慎用第三方库,会引入一些不必要的代码

模糊,动画这些都是比较耗内存的操作,Material Design这种设置为纯色背景风格往往可以节省不少内存

一些后台缓存的页面(view,fragemnt等能占用内存用户又无法感觉到的)可以保留数据,将页面对应的图片数据,动画资源进行释放,下次再来的时候,从新加载

耗内存的放到native里面

工具现在一个android profile就可以了,再加adb 命令吧
具体android profile 都有替代了,可以完全用一个工具来搞一切
我就不一一总结了,详细记录见:https://blog.csdn.net/qq_20451879/article/details/121426183
但使用方式,我会稍后写出来,暂时觉得,systemtrace, prof文件对单纯app不实用,直接抓取 java 的method trace 或java的新增对象内存更好一些。

如下图:

卡顿我是没有经验的,平时用不着啊,卡的狠了,就anr了,不狠就不用管 。这里只能浅显的记录下,不过我开始技术储备一下了

3 systrace使用技巧:


1 通过在时间间隔周围绘制一个矩形来选择所需的时间间隔。
2 使用标尺工具标记或突出显示问题区域。
3 依次点击 View Options > Highlight VSync,以显示每项显示屏刷新操作。
4 如果觉得页面中的信息太多了,想要筛选,可以点击Processes菜单,在弹出列表中进行筛选
Systrace 报告列出了渲染界面帧的每个进程,并指明了沿时间轴渲染的每个帧
点击某个帧圆圈可将其突出显示,并提供有关系统为渲染该帧所做工作的其他信息,包括提醒。
此报告还会显示系统在渲染该帧时执行的方法。您可以调查这些方法以确定界面卡顿的可能原因

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Dynamo——常用几何形体的创建与编辑(二)

上一次&#xff0c;我们简单整理了一些创建几何形体的节点用法&#xff0c;今天我们接着整理一些&#xff0c;几何形体的编辑方法。 一、坐标点的平移复制 [Point.Add] 使用节点 “Vector.ByCoordinates” 生成一个向量&#xff0c;将该向量连接到 “Point.Add” 节点的输入端 …

使用R语言进行聚类分析

一、样本数据描述 城镇居民人均消费支出水平包括食品、衣着、居住、生活用品及服务、通信、文教娱乐、医疗保健和其他用品及服务支出这八项指标来描述。表中列出了2016年我国分地区的城镇居民的人均消费支出的原始数据&#xff0c;数据来源于2017年的《中国统计年鉴》&#xf…

点云数据切片及使用threejs加载

测试点云数数据大小 2.94G cesium 加载&#xff1a; 数据处理&#xff1a;cesiumlab 点云切片->cesium 3Dtiles API 加载 threejs 加载 只支持 pcd 格式&#xff0c;故将 lsa 数据导入&#xff0c;在导出为了 pcd&#xff0c;在将数据直接转出 pcd 会直接闪退&#xff0…

HUAWEI 华为交换机 配置 MAC 防漂移 防MAC伪造示例

组网需求 某企业网络中&#xff0c;用户需要访问企业的服务器。如果某些非法用户从其他接口假冒服务器的MAC 地址发送报文&#xff0c;则服务器的 MAC 地址将在其他接口学习到。这样用户发往服务器的报文就会发往非法用户&#xff0c;不仅会导致用户与服务器不能正常通信&…

FreeRTOS之消息队列的示例记录

前言 我的理解是 消息队列主要是用于任务之间存在主从关系的时候&#xff0c;比如说显示屏显示数据&#xff0c;显示屏的作用只是提供显示&#xff0c;数据来源应该是其他任务线程&#xff0c;所以就存在多个线程通信问题。 FreeRTOS中消息队列 这里我们以数组为例&#xff…

Pytorch学习 day07(神经网络基本骨架的搭建、2D卷积操作、2D卷积层)

神经网络基本骨架的搭建 Module&#xff1a;给所有的神经网络提供一个基本的骨架&#xff0c;所有神经网络都需要继承Module&#xff0c;并定义_ _ init _ _方法、 forward() 方法在_ _ init _ _方法中定义&#xff0c;卷积层的具体变换&#xff0c;在forward() 方法中定义&am…

Python 3 教程(1)

Python 3 教程 Python 的 3.0 版本&#xff0c;常被称为 Python 3000&#xff0c;或简称 Py3k。相对于 Python 的早期版本&#xff0c;这是一个较大的升级。为了不带入过多的累赘&#xff0c;Python 3.0 在设计的时候没有考虑向下兼容。 Python 介绍及安装教程我们在后期中有介…

【高效开发工具系列】Windows 系统下将 Windows 键盘的 ctrl 和 alt 互换

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

JVM——执行引擎

文章目录 1、概述2、计算机语言的发展史2.1、机器码2.2、汇编语言2.3、高级语言2.4、字节码 3、Java代码编译和执行过程4、解释器5、JIT编译器5.1、为什么HotSpot VM同时存在JIT编译器和解释器5.2、热点代码探测确定何时JIT5.3、设置执行模式5.4、C1编译器和C2编译器 6、AOT编译…

【蓝桥杯-单片机】LED和按键小练习:Led彩灯控制系统

文章目录 【蓝桥杯-单片机】LED和按键小练习&#xff1a;Led彩灯控制系统01 题目描述02 题目解答03 本题总结整体逻辑框架&#xff08;详细版&#xff09;整体逻辑框架&#xff08;缩略版&#xff09;按键读取模块按键消抖模块流水灯显示模式&#xff08;1&#xff09;从上向下…

USB PD快充充电器静电浪涌保护TVS

USB PD快充充电器已经成为生活中无处不在的必备物品&#xff0c;它能够为我们的各种电子设备提供快速而便捷的充电解决方案&#xff0c;比如智能手机和平板电脑&#xff0c;笔记本电脑&#xff0c;可穿戴设备&#xff0c;摄像机和摄像设备&#xff0c;汽车充电器&#xff0c;以…

图片二维码不限扫码次数怎么做?长期有效的图片二维码在线生成技巧

图片制作二维码能长期使用吗&#xff1f;在生活中很多地方都可以看到很多存有图片的二维码&#xff0c;通过扫码后查看图片内容&#xff0c;比如一些公共场所、产品介绍、景区等场所中都有图片转二维码的应用。那么怎么做出可以长期扫码展示图片二维码呢&#xff0c;其实方法很…

Awesome-Backbones-main——alexnet模型分析

AlexNet作为骨干网络相对较老&#xff0c;可能在复杂数据集上的表现不如一些最新的深度网络结构&#xff0c;如ResNet、EfficientNet等&#xff0c;学习率调整策略中采用了阶梯式学习率更新器&#xff0c;可能并不总是适合所有数据集和模型&#xff0c;需要根据具体情况调整学习…

【办公类-21-09】三级育婴师 视频转音频Python

背景需求&#xff1a; 用AI对话工具试试能否Python将MP4视频转成音频&#xff0c;再转成文字docx&#xff08;不用格式工厂转&#xff09; 结果&#xff1a; 视频MP4转音频wav 视频MP4转音频wav 作者&#xff1a;AI对话大师&#xff0c; 时间&#xff1a;2024年3月8日 impo…

开源的Java报表库JasperReports介绍

JasperReports 是一个流行的开源 Java 报表库&#xff0c;它允许开发人员创建丰富的、基于 Java 的报表&#xff0c;这些报表可以与多种数据源交互&#xff0c;并且可以很容易地集成到 Java 应用程序中。JasperReports 提供了丰富的功能&#xff0c;包括数据可视化、图表、子报…

【Vue+ElementUI】Table表格实现自定义表头展示+表头拖拽排序(附源码)

效果图 因项目采用的是Vue2&#xff0c;所以这个功能目前采用的是Vue2的写法。 Vue3请自行修改扩展代码&#xff1b;或收藏关注帖子&#xff0c;后续Vue3项目如有用到会在本帖子更新修改。 安装vuedraggable&#xff08;拖拽插件&#xff09; cnpm i vuedraggable先说用法&…

github Commits must have verified signatures

1.首先确认是否有权限&#xff0c;如有权限的情况下那就是配置有问题了 我的情况是&#xff0c;能拉取代码&#xff0c;提交的时候出现这种情况&#xff1a;Commits must have verified signatures 这里是生成证书&#xff0c;如果已经生成过的&#xff0c;就不用生成了 ssh…

GIS之深度学习08:安装GPU环境下的pytorch

环境&#xff1a; cuda&#xff1a;12.1.1 cudnn&#xff1a;12.x pytorch&#xff1a;2.2.0 torchvision&#xff1a;0.17.0 Python&#xff1a;3.8 操作系统&#xff1a;win &#xff08;本文安装一半才发现pytorch与cuda未对应&#xff0c;重新安装了cuda后才开始的&a…

超声波清洗机哪个品牌好?四款热度高超声波清洗机力荐

在当今社会&#xff0c;随着生活节奏的加快&#xff0c;年轻人越来越多地依赖眼镜来纠正视力或保护眼睛。无论是为了时尚搭配&#xff0c;还是因为长时间面对电脑和手机屏幕导致的视力问题&#xff0c;眼镜已经成为许多年轻人日常生活中不可或缺的配件。然而&#xff0c;就在我…

SSH安全协议介绍

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; SSH&#xff08;Secure Shell&#xff0c;安全外壳&#xff09;是一种网络安全协议&#xff0c;通过加密和认证机制实现安全的访问和文件传输等业…