Android面试题-与性能优化相关面试题四
来源:互联网 发布:matlab读取txt数据画图 编辑:程序博客网 时间:2024/05/04 22:49
本文配套视频
- HierarchyViewer配套视频
- 内存抖动现象配套视频
- Lint配套视频
源码分析相关面试题
- Volley源码分析
- 注解框架实现原理
- okhttp3.0源码分析
与XMPP相关面试题
- 与XMPP相关试题一
- 与XMPP相关试题二
与性能优化相关面试题
- 与性能优化相关面试题一
- 与性能优化相关面试题二
- 与性能优化相关面试题三
- 与性能优化相关面试题四
- 与性能优化相关面试题五
- 与性能优化相关面试题六
- 与IPC机制相关面试题
与登录相关面试题
- oauth认证协议原理
- token产生的意义
- 微信扫一扫实现原理
与开发相关面试题
- 迭代开发的时候如何向前兼容新旧接口
- 手把手教你如何解决as jar包冲突
- context的原理分析
与人事相关面试题
- 人事面试宝典
文字部分如看得太累,下面有配套视频,视频内容和文字部分内容一致。
12-如何对android应用进行内存性能分析
Android应用UI性能分析
在使用App时会发现有些界面启动卡顿、动画不流畅、列表等滑动时也会卡顿出现这种情况,可以考虑对UI性能分析。
首先要清楚卡顿的原因,有以下几种情况:
人为在UI线程中做轻微耗时操作,导致UI线程卡顿;
布局Layout过于复杂,无法在16ms内完成渲染;
同一时间动画执行的次数过多,导致CPU或GPU负载过重;
View过度绘制,导致某些像素在同一帧时间内被绘制多次,从而使CPU或GPU负载过重;
View频繁的触发measure、layout,导致measure、layout累计耗时过多及整个View频繁的重新渲染;
内存频繁触发GC过多(同一帧中频繁创建内存),导致暂时阻塞渲染操作;
冗余资源及逻辑等导致加载和执行缓慢;
臭名昭著的ANR;
如何分析?
分析UI卡顿我们一般都借助工具,通过工具一般都可以直观的分析出问题原因,从而反推寻求优化方案,具体如下细说各种强大的工具
使用HierarchyViewer分析UI性能
我们可以通过SDK提供的工具HierarchyViewer来进行UI布局复杂程度及冗余等分析
通过命令启动HierarchyViewer
接下来Hierarchy window窗口打开:
一个Activity的View树,通过这个树可以分析出View嵌套的冗余层级,以及每个View在绘制的使用时长也有表示。
使用Lint进行资源及冗余UI布局等优化
冗余资源及逻辑等也可能会导致加载和执行缓慢,这可以使用Link工具,来发现优化这些问题的
在Android Studio 1.4版本中使用Lint最简单的办法:
就是将鼠标放在代码区点击右键->Analyze->Inspect Code–>界面选择你要检测的模块->点击确认开始检测,等待一下后会发现如下结果:
如果存在冗余的UI层级嵌套,会进行高亮显示, 我们根据提示可以点击跳进去进行优化处理掉的。
使用Memory监测及GC打印与Allocation Tracker进行UI卡顿分析
由于Android系统会依据内存中不同的内存数据类型分别执行不同的GC操作,常见应用开发中导致GC频繁执行的原因主要可能是因为短时间内有大量频繁的对象创建与释放操作,也就是俗称的内存抖动现象,或者短时间内已经存在大量内存暂用介于阈值边缘,接着每当有新对象创建时都会导致超越阈值触发GC操作
如何查看?
Android Studio 工具提供内存查看器:
根据内存抖动现象,查看log日志进行分析:
如何看到,这种不停的大面积打印GC导致所有线程暂停的操作必定会导致UI视觉的卡顿,所以我们要避免此类问题的出现,具体的常见优化方式如下:
检查代码,尽量避免有些频繁触发的逻辑方法中存在大量对象分配;
尽量避免在多次for循环中频繁分配对象;
避免在自定义View的onDraw()方法中执行复杂的操作及创建对象(譬如Paint的实例化操作不要写在onDraw()方法中等);
对于并发下载等类似逻辑的实现尽量避免多次创建线程对象,而是交给线程池处理。
有了上面说明GC导致的性能后我们就该定位分析问题了,
我们可以通过运行DDMS->Allocation Tracker标签打开一个新窗口,然后点击Start Tracing按钮,接着运行你想分析的代码,运行完毕后点击Get Allocations按钮就能够看见一个已分配对象的列表,如下:
根据内存分配情况,进行优化。
写篇文章和录制视频从选题,思考,组织,写作,编辑至少需要一个多小时,而您点赞和转发只需要0.1秒,就可以带给我更大的动力,何乐而不为呢?
- 欢迎关注微信公众号,长期推荐技术文章和技术视频
- Android面试题-与性能优化相关面试题四
- Android面试题-与性能优化相关面试题一
- Android面试题-与性能优化相关面试题二
- Android面试题-与性能优化相关面试题三
- Android面试题-与性能优化相关面试题五
- Android面试题-与性能优化相关面试题六
- android面试题-与IPC机制相关面试题
- Android面试题-与xmpp相关面试题
- android面试题四
- android 面试题(四)
- Android 面试题四
- Android相关面试题
- android相关面试题
- Android面试题相关
- Android面试题-与XMPP相关试题一
- Android面试题集四
- Android面试题(四)
- android面试题之四
- 创建Spring-Mybatis web项目,解决IDEA下找不到XXXmapper.xml文件的问题
- 用C#在windows上操控电脑自带蓝牙(入道指南)
- 第一章 大数据产业
- 利用POI将XML里的宽度转换为Excel的宽度
- java程序猿的成长记录之(二)web中自定义标签tld与业务字典的结合使用感悟
- Android面试题-与性能优化相关面试题四
- 计算机网络体系结构及各数据报文结构
- 基于kaldi的在线中文识别,online的操作介绍
- 抛弃隐晦,明了的理解Spring IOC与AOP
- COGS 439 [网络流24题] 软件补丁
- WEB 容器、WEB服务和应用服务器的区别与联系
- [ZOJ 3765 Lights] Splay
- Watson Explorer 入门(2):创建集合(Collection)
- 联想thinkpad E470无线网络无法使用问题解决方法