• 前言

  app启动耗时过长的话,无论你的app里面的内容多么丰富有趣,作为一个用户,首先是没有耐心去等待的,如果我是一个用户,我会这样想:这是什么垃圾公司出的什么烂app,再等2s不进来就卸载,黑人问号???还真是垃圾,还没出来;于是乎,长按拖拽卸载,一套带走...

  从个人层面讲,是对研发人员能力的否定;从公司层面讲,就是对该公司的否定;诸如,这家公司出的app很垃圾,同类产品也不会优先选择.由此可见,app启动耗时首先决定着它的第一体验,快不快,流不流畅都是之后才看得到的;而对于app启动耗时的分析就显得尤为重要了.

  • 工具

  前天以前我一个app启动大概要花费8s,不是忽悠,是真的有这么久.就以这个项目为例,简单分析一波app启动耗时.

  工欲善其事,必先利其器.推荐给大家的是Android Studio内置的一个工具 TraceView;它能让你知道时间花在哪里了,有没有东西卡UI.

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

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

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

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

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

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

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

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

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

在我的MyApplication下

在我的主Activity的OnResume方法中

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

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

 

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

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

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

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

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

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

总结

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">

Android app启动耗时分析的更多相关文章

  1. [FMX] Android APP 启动黑屏优化补丁

    使用说明 *************************************************** Android APP 启动黑屏优化补丁 作者: Swish, YangYxd 201 ...

  2. Android app启动activity并调用onCreate()方法时都默默地干了什么?

    Android app启动activity并调用onCreate() 方法时都默默地干了什么?   在AndroidManifest.xml文件中的<intent-filter>元素中有这 ...

  3. android app启动就闪退怎么办?

    开发过程中,如遇到android app启动就闪退,不要急,直接进入调试模式运行app,就会取得出错的原因. http://blog.sina.com.cn/s/blog_44fa172f0102wg ...

  4. Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

    转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象 ...

  5. Android App性能评测分析-流畅度篇

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

  6. Android Activity启动耗时统计方案

    作者:林基宗 Activity的启动速度是很多开发者关心的问题,当页面跳转耗时过长时,App就会给人一种非常笨重的感觉.在遇到某个页面启动过慢的时候,开发的第一直觉一般是onCreate执行速度太慢了 ...

  7. 高德APP启动耗时剖析与优化实践(iOS篇)

    前言最近高德地图APP完成了一次启动优化专项,超预期将双端启动的耗时都降低了65%以上,iOS在iPhone7上速度达到了400毫秒以内.就像产品们用后说的,快到不习惯.算一下每天为用户省下的时间,还 ...

  8. Visual Studio 2015开发Android App启动调试始终无法完成应用部署的解决方案

    创建一个Android App项目后,直接启动调试发现Visual Studio Emulator for Android已成功运行,但应用始终处于Build中(等待时间超过1小时),并未如预期通过a ...

  9. Android app启动是出现白屏或者黑屏如何解决?

    1.为什么 APP 启动时会出现白屏或者黑屏? 当打开一个 Activity 时,如果这个 Activity 所属的应用还没有在运行,系统会为这个 Activity 所属的应用创建一个进程,但进程的创 ...

随机推荐

  1. AndroidManifest.xml文件详解(permission-group)

    http://blog.csdn.net/think_soft/article/details/7578760 语法(SYNTAX): <permission-groupandroid:desc ...

  2. [转载]开发 Spring 自定义视图和视图解析器

    原文出处 http://www.ibm.com/developerworks/cn/java/j-lo-springview/ 概述 Spring 3.0 默认包含了多种视图和视图解析器,比如 JSP ...

  3. Flask实战第40天:图片验证码生成技术

    图片验证码生成 安装pillow pip install pillow 在utils下新建python package命名为captcha 把需要需要用到的字体放在captcha下 编辑captcha ...

  4. [NOIP2015] D1T2 信息传递

    洛谷题目链接:https://www.luogu.org/problemnew/show/2661 一道有很多种解法的题目 通过划归,发现就是求最小环 那么立即能想到的算法:1.Tarjan求强连通分 ...

  5. hdu 5961 传递 (2016ccpc 合肥站 A题)

    传递 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  6. [Lydsy1806月赛] 超速摄像头

    题面在这里! 可以证明只要叶子两两路径满足条件即可,于是便可以贪心啦,从最外圈(叶子)开始一层一层选,选出前 k/2 层. 如果k是奇数的话,还可以多选一个不是前 k/2 层的点. #include& ...

  7. CodeForces - 995B Suit and Tie

    题面在这里! 明明可以出成n<=1e5但是因为拒绝写数据结构而只出到n<=100,,,出题人真的很棒棒.. 一个显然的贪心就是,把和当前序列最左端的数匹配的数移到它的右边,这样迭代下去总是 ...

  8. 【Matrix-tree定理】【BEST Theorem】hdu6064 RXD and numbers

    题意:给你一张有向图,求从1出发,回到1的欧拉回路数量. 先特判掉欧拉回路不存在时的情况. 看这个吧:http://blog.csdn.net/yuanjunlai141/article/detail ...

  9. Excel | 如何用Excel实现证件照底色调换

    这段时间因为一些事情需要用到证件照这个东西,大家应该都清楚,不管是简历还是各种考试上面,都需要贴上一张规规矩矩的证件照片或是上传电子照片. 通常,我们到照相馆照证件照的时候,无外乎红底.蓝底以及白底这 ...

  10. Java高级架构师(一)第34节:Nginx的Http模块部分的指令

    默认长链接的数目在100个 默认长链接的超时时间,一般在75S.