热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidApp性能评测与调优

一、内存优化的目的以及工具介绍内存对于移动设备来说是一种稀缺资源。Android内存不足带来的问题:OOM;UI不流畅内存指标:占用,泄露多少UI流畅度指标:帧数,响应时间IO指标:阻

一、内存优化的目的以及工具介绍
内存对于移动设备来说是一种稀缺资源。
Android内存不足带来的问题:OOM;UI不流畅
内存
指标:占用,泄露多少
UI流畅度
指标:帧数,响应时间
IO
指标:阻塞式响应时间

DDMS工具(Eclipse环境)
Heaps
Heap size
Allocated
Allocation Tracker
MAT(Memory Analyzer)
Leak Suspects 内存泄露报告
Top Consumers 占用者报告
Histogram 每个Class占用内存
Dominator Tree:列出那些对象占用内存最多,以及谁在保留这些对象。
android.os.Debug

内存测试的步骤:
1. 编译代码
2. 选定测试场景(来自于经验&开发)
3. 测试场景转换成用例
4. 跑起工具Run用例
5. 结合代码,分析

二、Android APP内存的主要问题分析与总结
1、Static——常见于单例模式
2、多线程生命周期过长,导致本该释放的资源没有释放
3、大胖子Bitmap
4、Cursor——不能单单close

开发人员能做的:
1. 及时的销毁
2. 设置一定的采样率
3. 巧妙地运用软引用(SoftReference)

private ImageView preview;
BitmapFactory.Options optiOns= new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri), null, options);
preview.setImageBitmap(bitmap);
  1. Cursor用完记得关掉;CursorAdapter可以再onDestroy中关掉。
protected void onDestroy() {
if (mAdapter != null && mAdapter.getCursor() != null) {
mAdapter.getCursor().close();
}
super.onDestroy();
}

三、UI绘制原理以及量化工具
影响UI流畅度的原因:
1. 主线程干的活太多,UI没时间来相应用户操作。
2. 阻塞式方法执行时间过长。
3. 不太合理的UI绘制方式,导致新的UI显示出来时出现顿挫感。

同时了解下Android怎么绘制UI:
1. 读取XML(inflate)
2. 计算大小(measure)
3. 布局坐标计算(layout)
4. 绘制到屏幕(draw)
其中2、3两步最为耗时。

垂直同步

四、如何获取应用的UI流畅度

五、IO对性能的影响
1. SQLite,xml类
优点:稳定、可靠、保证原子性
缺点:效率低
Read
(1)异步化——不要阻塞在主线程
(2)预判+缓存——在listview中预加载下面的item到缓存
(3)避免复杂的查询语句
Write
(1)异步化
(2)仅支持文件锁
(3)善用索引
(4)善用SQLite事务机制
(5)善用UPDATE…WHERE…
2. 文件类
优点:简单、快速
缺点:无原子性保证


推荐阅读
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了一款名为TimeSelector的Android日期时间选择器,采用了Material Design风格,可以在Android Studio中通过gradle添加依赖来使用,也可以在Eclipse中下载源码使用。文章详细介绍了TimeSelector的构造方法和参数说明,以及如何使用回调函数来处理选取时间后的操作。同时还提供了示例代码和可选的起始时间和结束时间设置。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
author-avatar
xuncijins
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有