• 0
  • 0
分享
  • Android性能优化大集结
  • 恬恬圈 2020-02-24 17:26:10 字数 1806 阅读 1884 收藏 0

一、App启动速度优化

1.1 Google 加速方案

  • 利用提前展示出来的Window,快速展示出来一个界面,给用户快速反馈的体验;

  • 避免在启动时做密集沉重的初始化(Heavy app initialization);

  • 定位问题:避免I/O操作、反序列化、网络操作、布局嵌套等。

1.2 通用加速方案:

  • 利用主题快速显示界面;

  • 异步初始化组件;

  • 梳理业务逻辑,延迟初始化组件、操作;

  • 正确使用线程;

  • 去掉无用代码、重复逻辑等

1.3 启动方式:

冷启动

当启动应用时,后台没有该应用的进程(常见如:进程被杀、首次启动等),这时系统会重新创建一个新的进程分配给该应用

暖启动

当启动应用时,后台已有该应用的进程(常见如:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用

热启动

相比暖启动,热启动时应用做的工作更少,启动时间更短。热启动产生的场景很多,常见如:用户使用返回键退出应用,然后马上又重新启动应用

热启动和暖启动因为会从已有的进程中来启动,不会再创建和初始化Application

平时我们讨论中基本都会将暖启动和热启动合在一起统称为热启动,因为暖启动与热启动差异很小,如果不是特别留意启动流程,那么在用户体验和感官上没有直接差异,但是在framework层执行时是有一定差异的。本次优化点也是围绕冷启动和热启动来做,将暖启动与热启动统称为热启动
另外有一点,从绝对时间上来看,app安装后的首次启动将会最耗时,因为首次启动会新建数据库,sp文件,各种缓存,配置等。

白屏/黑屏问题

白屏或黑屏,具体是哪一个,取决于app的Theme使用的是dark还是light主题。

Android Studio 引起的白屏
2.x时代的AS开启了instant run以后可能会导致白屏,但实际完整的apk包不会出现此问题。

冷启动引起的白屏/黑屏

点击你app那一刻到系统调用Activity.onCreate()之间的时间段。在这个时间段内,WindowManager会先加载app主题样式中的windowBackground作为app的预览元素,然后再真正去加载activity的layout布局。

暖启动/热启动引起的白屏/黑屏

这点在配置较好,内存空间充足的手机上不是很明显,但低端手机或者内存吃紧的情况下依旧会出现”闪屏”效果,持续时间很短,一闪而过。

二、布局优化方案

2.1 通用布局优化方案

  • 调试GPU过度绘制,将Overdraw降低到合理范围内;

  • 减少嵌套层次及控件个数,保持view的树形结构尽量扁平(使用Hierarchy Viewer可以方便的查看),同时移除所有不需要渲染的view;

  • 使用GPU配置渲染工具,定位出问题发生在具体哪个步骤,使用TraceView精准定位代码;

  • 使用标签,Merge减少嵌套层次、ViewStub延迟初始化。

相关工具:

(1)、打开Show GPU Overrdraw的选项:设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制;

(2)、Hierarchy Viewer

2.2 检测应用在UI线程的卡顿

  • 利用UI线程Looper打印的日志;

  • 利用Choreographer。

开源地址:

https://github.com/markzhai/AndroidPerformanceMonitor[方式1]

https://github.com/wasabeef/Takt[方式2]

https://github.com/friendlyrobotnyc/TinyDancer [方式2]

三、内存优化方案

3.1 通用方案

  • 节制地使用Service

  • 当界面不可见时释放内存

  • 当内存紧张时释放内存

  • 避免在Bitmap上浪费内存

  • 使用优化过的数据集合

  • 使用ProGuard简化代码

  • 利用工具检测内存泄漏(https://developer.android.google.cn/studio/preview/features/android-profiler.html#advanced-profiling)


本文为51Testing经授权转载,转载文章所包含的文字来源于作者:龚十一。如因内容或版权等问题,请联系51Testing进行删除。原文链接:https://www.jianshu.com/p/36751d5c5a9f。

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   传感器、这些传感器输出的ML推断结果是自动辅助驾驶的重要核心。Mixel和Rambus在MIPI DevCon上就这种传输技术MIPI进行了讲解,涉及了来自Rambus的摄像头串行接口(MIPI CSI-2)和来自Mixel的物理接口(MIPI C-PHY和MIPI D-PHY)  MIPI CSI-2和PHY传输和接收模块  MIPI CSI-2是定义摄像头和ISP(图像信号处理器)之间串行接口的功能。像素从一端流入,最终从另一端流出,所以该接口需要一个发送功能和一个接收功能。由于这些功能必须能够连接任何摄像头(或多个摄像头)到任何ISP,需要很大的灵活性,比如传感器和最终消费者之间的带...
            0 0 473
            分享
          •   前言  功能测试的天花板在15k左右,自动化的入行在15k左右。这两个需要掌握的技能完全不一样,先聊薪资吧。  如果刚入门学习结束后,保守点说薪资在7.5k。这个薪资不高的原因主要是之前没有相关的IT行业工作经验。一线城市的功能测试月薪大概在8k左右。  二三线城市基本就是5k左右或者以上,虽然现在测试的薪资水平也有不同的提升,但是只会功能测试没有任何优势。不会自动化、性能、接口在就业上就没有什么竞争力。慢慢给大家从0到1的介绍测必会的知识。  作为一个过来人来讲,如果大家想进阶,一定要系统的学习。  我按照薪资的不同大致划分成2个档位:  ·月薪5-9k:从零基础入门到能够找到工作  ·...
            0 0 795
            分享
          •   本文将讨论微服务测试的重要性、挑战和最佳实践。  微服务架构是一种越来越流行的构建复杂分布式系统的方法。在此体系结构中,大型应用程序被分成较小的、独立的服务,这些服务通过网络相互通信。微服务测试是确保这些服务无缝协同工作的关键步骤。本文将讨论微服务测试的重要性、挑战和最佳实践。  微服务测试的重要性  测试微服务对于确保系统按预期工作至关重要。与传统的单体应用程序不同,微服务由通过网络相互通信的小型独立服务组成。因此,微服务测试比测试传统应用程序更复杂、更具挑战性。尽管如此,测试对于检测系统中的问题和错误、提高性能并确保微服务正确有效地工作至关重要。  微服务测试对于确保基于微服务的应用程...
            0 0 949
            分享
          •   近几年来随着人工智能、物联网、大数据、云计算等IT新产业快速发展,各行业对软件产品质量要求越来越高。互联网行业快速发展以及技术快速迭代的需求下,期望通过IT培训“借风起火”的人群愈加庞大。BAT、美团、字节跳动、动因等企业纷纷打出高薪招聘软件测试人才。  科技信息时代,万物瞬息而变,而IT行业作为其核心支柱,必然需要不断创新。与此同时企业对测试人才也提出了新的需求,如何应对未来的技术变革,是每个测试人员值得深思的问题。  很多人刚从事软件测试这个行业的时候意气风发,对未来充满无限憧憬。但是摸爬滚打几年以后,渐渐的发现这个行业不像当初了解的那么美好。比起网上很多鼓吹自动化、性能测试多么有前途...
            0 0 1417
            分享
          •   1,名词解释  FPGA(Field-Programmable Gate Array),即现场可编程门阵列  以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局布线,快速的下载到 FPGA 上进行软件测试,是现代 IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。  专用集成电路  英文全称:Application Specific Int...
            1 0 5929
            分享
      • 51testing软件测试圈微信