分析启动耗时 android,Android app启动耗时分析

首先编译你的程序,打开Android Studio里面的Android Monitor,找到下图的按钮

<img src="//bbsmax.ikafan.com/static/L3Byb3h5L2h0dHBzL3BpYzIuemhpbWcuY29tL3YyLTA4Zjk1ZmUxMjM5ODgwNTkzMDU5YjE3YzFlMGU5NjcxX2IucG5n.jpg" data-rawwidth="594" data-rawheight="330" class="origin_image zh-lightbox-thumb" width="594" data-original="https://pic2.zhimg.com/v2-08f95fe1239880593059b17c1e0e9671_r.png">

366809e1fe2b8b658fec1f2ef4021254.png

然后在app里面干你想trace的部分,开个页面什么的

然后点同样的按钮完成tracing,接下来Android Studio会自动生成一个图表,比DDMS里面的版本好用太多!!

这不失为一种性能分析的不错方法;现在我们说到的是app启动耗时,app启动做了什么事情?

App启动入口类 Application(AndroidManifest.xml中可自定义),然后从配置了

58d90d8cd76567e379f2c23883923b17.png

的Activity开始启动;于是我们就可以简单的依据此顺序来进行如下操作;

在启动开始时,Debug.startMethodTracing("/sdcard/dmtrace.trace");

在启动完成时,Debug.stopMethodTracing();

在我的MyApplication下

79253e8ec989dd29b24bed23d3a239bc.png

在我的主Activity的OnResume方法中

621720f0e14eeb2cff3d263e3f5b07ac.png

那么随着程序的运行,在/sdcard/文件夹下会自动创建一个dmtrace.trace的文件;这个文件可以帮助我们很好的分析,这个启动的时间段内,做了什么事情.

把这个dmtrace.trace拖到Android Studio中,会看到这样的一个界面

1509fe362cb8fff1527c6ef57b683ad9.png

鼠标点击到这个时间条上会出现更详细的耗时信息

1d3d333a46b860e0565975ce181a6abf.png

可以看到,该方法实际耗时1.5s;而我看到的都是mainThread,也就是主线程,UI线程里进行的操作;难怪这么卡...

到项目中去看CacheManager里这个isCache确实是个耗时的操作,我们就把它放到子线程中进行,一下节省不少时间...

在下面的表中也可以很明显的看到这确实占据了启动时间的一大部分

021b8a1aa6ea7dbb4d393fa6258f5f8e.png

具体地,把.trace文件拖入到DDMS工具可以看到更加详细清晰的效果

2c4a0241972f7fb49031b61a95070248.png

具体地,每一行的耗时不去细说,来源很多...

总结

TraceView是一个非常强大的性能分析工具,因为Android 官网对这个工具的使用介绍文档很少,没有讲到底怎么使用。

最近我在做app启动耗时方面的性能分析,就慢慢琢磨了这么工具的使用,发现非常强大,写下来总结一下。

Android的性能分析工具还有很多,比如:

Eclipse Memory Analyzer Tool 来分析Android app的内存使用

Dump UI Hierarchy for UI Atomator,分析UI层级

systrace

其他

<img src="https://pic4.zhimg.com/e70ba3cdcd41037d42655627c4ab13ef_b.png" data-rawwidth="1435" data-rawheight="701" class="origin_image zh-lightbox-thumb" width="1435" data-original="https://pic4.zhimg.com/e70ba3cdcd41037d42655627c4ab13ef_r.png">

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

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

相关文章

pytorch 对抗样本_《AI安全之对抗样本入门》—3.4 PyTorch

3.4 PyTorchPyTorch是torch的Python版本,是由Facebook开源的神经网络框架。PyTorch虽然是深度学习框架中的后起之秀,但是发展极其迅猛。PyTorch提供了NumPy风格的Tensor操作,熟悉NumPy操作的用户非常容易上手。我们以解决经典的手写数字识别…

包包的结构制图_15种常见领型的结构制图

原标题:15种常见领型的结构制图更多独家素材分享欢迎添加博主微信 Wlb109701来源 | 服装云教育整理编辑V领注意1、V形领的前开深,除夜礼服外,一般最深开到胸围线附近(胸围线以上3cm处),如果继续开深,需添加挡胸。2、贴…

android+内存清理+代码,最新版本:Android一键式清理,内存清理功能的实现

Android一键式清理,内存清理功能的实山清理大师等均提供一键式清理和一键加速等功能。实际上,它们杀死了一些后台进程以达到释放内存的目的。基本思想是列出所有正在运行的进程,检查它们的重要值(RunningAppProcessInfo.importance&#xff0…

android xml通知栏权限配置,Android开发中 AndroidManifest.xml配置之service,receiver标签配置详解...

本文主要来分享service,receiver标签配置。如有错误,欢迎指正。android:directBootAware["true" | "false"]android:enabled["true" | "false"]android:exported["true" | "false"]android:foreground…

cups共享linux打印机_linux入门-映射网络驱动器

linux入门-映射网络驱动器在日常中,我们不会时时刻刻远程着linux服务器,那么有没有办法可以让我们在window电脑上映射linux的磁盘呢?这是可以实现的,这里我们就要介绍samba了。sambaSamba是在Linux和UNIX系统上实现SMB协议的一个免…

c++ idea 插件_idea快速开发插件

插件:1、Background Image Plus这款插件并不能直接提高你的开发效率,但是可以让你面对的IDE不再单调,当把背景设置成你自己心仪的的图片,是不是会感觉很赏心悦目,编码效率会不会因此间接的提高?&#xff01…

android 删除模拟器,android – 如何从avd设备中删除脱机模拟器?

我在Android Studio中创建了几个AVD-s.他们在模拟器端口5554上启动.然后我通过android avd应用程序创建了另一个AVD,他们从端口5556开始.现在运行一个模拟器,我从adb devices -l获得以下输出:List of devices attachedemulator-5556 deviceemulator-5554 offline我正…

mongodb 搜索速度_MongoDB数据库查询性能提高40倍的经历分享

前言数据库性能对软件整体性能有着至关重要的影响,本文给大家分享了一次MongoDB数据库查询性能提高40倍的经历,感兴趣的朋友们可以参考学习。背景说明1、数据库:MongoDB2、数据集:A:字段数不定,这里主要用到…

signature=8405d26e250ad07c44560263cb1d4fc0,Systems for analyzing microtissue arrays

摘要:A tissue microarray imaging system autonomously images, analyzes, and stores data for samples in a tissue microarray. The system may include a tissue microarray, a robotic microscope, and an imaging workstation that executes software to aut…

ios支付宝支付失败不回调_为什么 iOS 支付成功后能回到 APP ,但是没有回调?...

接入客户端从服务器端拿到 charge 对象后,调用下面的方法[Pingpp createPayment:chargeviewController:viewControllerappURLScheme:kUrlSchemewithCompletion:^(NSString *result, PingppError *error) {if ([result isEqualToString:"success"]) { …

html如何将设置文本效果,css如何对文本进行修饰

color属性:设置文本文字颜色。用法如下:color:颜色值;color属性可以设置的合法颜色值包括:16进制颜色值(例:#ffffff),rgb颜色值【例:rgb(0,0,0)】,rgba颜色值【例:rgb(0,…

HTML与cgi post传递与接收,CGI实例--表单GET与POST示例

CGI概述CGI(Common Gateway Interface: 公用网关接口)规定了Web服务器调用其他可执行程序(CGI程 序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互, 也就是CGI程序通过读标准输入,接受Web浏览器发送给Web服务器的信息, 进行处理, 将响应结果再通过…

vue横向树结构_vue树形结构的实现

1. 主要代码使用单文件组件的方式, 需要一个父组件treeMenu, 和子组件treeItem1.1 父组件treeMenu.vue:nodes"treeData">export default {name: treeMenu,data: () > {return {treeData: {label: china,nodes: [{label: hubei,nodes: [{label: wuhan},{label: …

cesium js 路径_vue2.0项目集成Cesium的实现方法

安装cesium在已有项目中执行,npm i cesium修改配置build/webpack.base.conf.js1、定义 Cesium 源码路径const cesiumSource ../node_modules/cesium/Sourceuse strictconst path require(path)const utils require(./utils)const config require(../config)const vueLoader…

pytorch模型加载测试_pytorch模型加载方法汇总

Pytorch有很多方便易用的包,今天要谈的是torchvision包,它包括3个子包,分别是: torchvison.datasets ,torchvision.models ,torchvision.transforms ,分别是预定义好的数据集(比如MNIST、CIFAR1…

android studio聊天跳转_Android 第三方应用跳转到QQ进行聊天

跳转QQ聊天代码十分简单&#xff1a;//获取包信息public static booleanisQQClientAvailable(Context context) {finalPackageManager packageManager context.getPackageManager();List pinfo packageManager.getInstalledPackages(0);if(pinfo !null) {for(inti 0;i < p…

html字体闪烁模板,CSS+JS阴影闪烁文字

阴影闪烁文字.F1 {filter: glow(Color#FF8000,Strength10);width150px;height200px;}.F2 {filter: glow(Color#00FF00,Strength9);width110px;height200px;}.F3 {filter: glow(Color#0080FF,Strength12);width90px;height200px;}var rate 500var i 0var F F1function doThin…

html 规定换行,HTML 换行

css3整理--clipclip语法: .selector { clip: rect | auto | inherit } 注意:clip属性只能在元素设置了“position:absolute”或者“position:fi ...Android 边框圆角RelativeLayout 圆角实现: drawable目录下面定义shape的xml文件: mall_header_rel_bg.xml <?xml version&…

qt执行命令行失败_QT缺少 qtcore4.dll,debug下运行不成功

刚装QT的时候&#xff0c;好像我的环境变量没有设置好&#xff0c;哎&#xff0c;。隐患终于爆发了。在VS下运行成功的QT程序&#xff0c;然后点击Debug下的.exe&#xff0c;老提示缺少Qtcore4.dll&#xff0c;当时正郁闷之极&#xff0c;忘了怎样在网页上查找&#xff0c;只是…

伪类如何动态在html设置样式,用js实现before和after伪类的样式修改的示例代码

本文介绍了使用javascript,jQuery实现修改before,after伪类的样式&#xff0c;分享给大家&#xff0c;具体如下&#xff1a;最近遇到一个需要改变:before,:after 伪类的样式&#xff0c;发现css中并不能直接选择某一个元素的:before和:after伪类元素&#xff0c;所以特总结了使…