启动查看工具总结

启动目标: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 报告列出了渲染界面帧的每个进程,并指明了沿时间轴渲染的每个帧
点击某个帧圆圈可将其突出显示,并提供有关系统为渲染该帧所做工作的其他信息,包括提醒。
此报告还会显示系统在渲染该帧时执行的方法。您可以调查这些方法以确定界面卡顿的可能原因

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

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

相关文章

【Web前端】Vue核心基础

文章目录 1. Vue简介2. Vue官网使用指南3. 初识Vue3.1 搭建Vue开发环境3.2 HelloWorld案例3.3 el与data的两种写法3.4 MVVM模型3.5 模板语法 4. 数据绑定4.1 v-bind单向数据绑定4.2 v-model双向数据绑定 5. 事件处理5.1 v-on绑定事件5.2 事件修饰符5.3 键盘事件 6. 计算属性6.1…

java实现冒泡排序

目录 算法 概念 算法步骤 代码示例 例题实战 算法 概念 冒泡排序 是一种简单直观的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误&#xff0c;就把他们交换过来。走访数列的工作时重复地进行直到没有再需要交换&#…

typescript学习(更新中)

目录 开发环境搭建类型如何声明有哪些类型编译配置文件 开发环境搭建 npm i -g typescripttsc检查是否安装成功 类型如何声明 // 先声明再赋值 let a: number a 1// 直接赋值 let b 1function sum(a: number, b: number): number {return a b } console.log(sum(1, 2))有…

leetcode72. 编辑距离

leetcode72. 编辑距离 题目 思路 dp[i][j] 代表 word1 到 i 位置转换成 word2 到 j 位置需要最少步数&#xff0c;所以&#xff0c; 当 word1[i] word2[j]&#xff0c;dp[i][j] dp[i-1][j-1]&#xff1b; 当 word1[i] ! word2[j]&#xff0c;dp[i][j] 1 min(dp[i-1][j-1]…

这样用redission分布式锁才优雅-自定义redission分布式锁注解(含spel表达式)

废话后面说&#xff0c;先上干货。 最终的使用效果是这样的&#xff1a; /*** 这里只是一个简单的示例&#xff0c;实际业务中&#xff0c;可能需要根据订单号查询订单信息&#xff0c;然后进行发货操作* 仅仅是为了证明相同订单号不能够同时操作&#xff0c;但是在实际的业务场…

Ubantu 18.04 如何映射IP到公网,外网可以访问

介绍一种简单的方式&#xff0c;就是通过路由侠 inux 系统安装路由侠&#xff0c;可通过两种方式进行&#xff0c;一种是通过直接脚本安装&#xff0c;一种是通过 Docker 安装。 windows下载地址&#xff1a;路由侠-局域网变公网 方式一&#xff1a;通过脚本安装 1、获取安…

java算法第十七天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

110.平衡二叉树 leetcode链接 思路&#xff1a; 使用后序遍历分别求左右子树的高度&#xff0c;若高度只差大于一&#xff0c;则返回-1&#xff0c;否则返回当前节点的最大高度。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* Tree…

【数据分享】2013-2022年全国范围逐日SO2栅格数据

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2013-2022年全国范围逐月SO2栅格数据和逐年SO2栅格数据&#xff08;均可查看之前的文章获悉详情&#xff09;。 本次我们给大家带来的是2013-2022年全国范围的逐日的SO2栅格数据&#xff0c;原始…

阿里云几核服务器够用?内存多少合适?

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

python基础总复习

Python基础班总复习 一、Python基础语法 1、注释概念 单行注释 # 多行注释 注释内容 &#xff0c;支持换行 > 在实际工作中&#xff0c;主要用于实现函数说明文档 2、变量的概念 场景&#xff1a;保存数据&#xff0c;所以理论上有数据的地方都有变量&#xff01; 变…

OJ_二叉排序树

题干 C实现 循环双指针法(一个指向父亲&#xff0c;一个指向待插入结点) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <queue> using namespace std;struct TreeNode {char data;TreeNode* left;TreeNode* right; };void InsertBST(TreeNode* …

C# OpenCvSharp DNN FreeYOLO 人脸检测

目录 效果 模型信息 项目 代码 下载 C# OpenCvSharp DNN FreeYOLO 人脸检测 效果 模型信息 Inputs ------------------------- name&#xff1a;input tensor&#xff1a;Float[1, 3, 192, 320] --------------------------------------------------------------- Outp…

每日OJ题_链表⑤_力扣25. K 个一组翻转链表

目录 力扣25. K 个一组翻转链表 解析代码 力扣25. K 个一组翻转链表 25. K 个一组翻转链表 难度 困难 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总…

音视频按照时长分类小工具

应某用户的需求&#xff0c;编写了这款根据音视频时长分类小工具。 实际效果如下&#xff1a; 显示的是时分秒&#xff1a; 核心代码&#xff1a; MediaInfo MI; if (MI.Open(strPathInput.c_str()) 0){return -1;}_tstring stDuration MI.Get(stream_t::Stream_Audio,0,_T…

斐波那契数 爬楼梯 使用最小花费爬楼梯

509. 斐波那契数 力扣题目链接(opens new window) 斐波那契数&#xff0c;通常用 F(n) 表示&#xff0c;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n -…

GitHub和Gitee的基本使用和在IDEA中的集成

文章目录 【1】GitHub1.创建仓库2.增加和修改文件3.创建分支4.删除仓库5.远程仓库下载到本地 【2】Gitee1.创建仓库2.远程仓库下载到本地. 【3】IDEA集成GitHub【4】IDEA集成Gitee1.在Gitee中修改&#xff0c;同步到本地2.从Gitee中下载项目 【1】GitHub 1.创建仓库 先登陆这…

阿里云99计划优惠:云服务器租用价格61元、99元、165元

阿里云99计划还有谁不知道么&#xff1f;阿里云不杀熟&#xff0c;新老用户同享&#xff0c;阿里云服务器99元一年&#xff0c;续费也是99元&#xff0c;续费不涨价家人们&#xff0c;2024年阿里云把云服务器价格打下来了&#xff0c;2核2G、2核4G、4核8G、4核16G、8核16G、8核…

【无标题】带大家做一个,易上手的家常西芹牛肉丸

这里 我准备的是 潮汕手工牛肉丸 都是弄好 里面有盐的 先拿出来清水化冰 准备一些西芹 切小段 一根胡萝卜 萝卜切片 和西芹段装在一起 调一碗料汁 两勺胡椒粉 一勺淀粉 一点清水 然后拿勺子搅拌均匀 三瓣大蒜 切成蒜末 导入 西芹段 萝卜片 高过菜的清水 一小勺食用油 小…

Web APIs 4 日期对象、节点操作

Web APIs 4 一、日期对象实例化日期对象方法案例&#xff1a;页面显示时间 时间戳 二、节点操作查找结点①父节点查找②子节点查找③兄弟节点查找 增加节点克隆节点删除节点 三、M端事件四、JS插件 一、日期对象 学习路径&#xff1a;实例化、日期对象方法、时间戳 实例化 …

2022 年 3 月青少年软编等考 C 语言一级真题解析

目录 T1. 双精度浮点数的输入输出思路分析 T2. 足球联赛积分思路分析 T3. 小写字母的判断思路分析 T4. 足球联赛积分 2思路分析 T5. 与 7 无关的数思路分析 T1. 双精度浮点数的输入输出 输入一个双精度浮点数&#xff0c;保留 8 8 8 位小数&#xff0c;输出这个浮点数。 时间…