[原] Android持续优化 - 提高流畅度
一.形象的感官一下流畅度概念
1. 这是官方给出的概念:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms。
2. 每秒帧数,实际上就是指动画或视频每秒放映的画面数。因此“帧”的概念就是指“画面”,1幅画就叫做“1帧”,每秒帧数指的就是“每秒播放的画面数”。帧数就是在1秒钟时间里传输的图片的量,也可以理解为图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 愈多,所显示的动作就会愈流畅。
3. 一帧占用内存数
当画面的分辨率是1024×768,刷新率要达到60帧/秒时,那么显卡在一秒钟内需要处理的像素量就达到了“1024×768×60=5713920”。那么一个“像素量”,相当与占用多少内存?我们用位图来代替粗略计算,把分辨率是1024×768看成一张对应大小的位图,通过位图的大小来大概计算占用的内存大小。而位图的存储算法,在维基百科上有详细的介绍,详见下面的链接。
一张1024×768的16位(bit)位图文件大小 = 1024×768×16/8 = 1572864 B = 1536 KB = 1.5 MB。如果要求画面的刷新率达到60帧/秒,则每秒需要处理的数据量就达到1.5 * 60 = 90 MB,这个数据是相当大。
实际系统中会通过GPU显卡处理显示,减少CPU工作量,或者系统会缓存或局部刷新来降低处理量。没有研究过,也很想研究一下显示的流程。
二.Android流畅度的根本:解放UI主线程
1. 不要阻塞UI线程;
2. 不要在UI线程之外操作UI。
三.以ListView加载图片为例
更流畅?
1. ListView如何流畅顺滑加载?
2. ListView使用convertView可以提高两倍性能?
3. ListView回收item的原理是什么?
4. ListView重复加载调用的问题?
5. 如何解决图片加载OOM问题?
6. 如何更流畅的加载图片?
7. ListView加载大量图片并发问题?
ListView优化要点
1. 优化Adapter,使用convertView,效率提高2倍;
2. 优化item布局,提高整体性能;
3. ListView重复调用问题可以设置layout_height高度固定或者fill_parent,加载的原理;
4. 使用addHeader和addFooter代替ScrollView;
图片加载优化要点
1. 有效加载大图片,合理设置BitmapFactory.Options的inSampleSize值,减少图片内存占用;
2. 仅请求图片的大小,inJustDecodeBounds = true,仅请求图片大小,而不会加载图片到内存;
3. 缓存图片,内存缓存LruCache,硬盘缓存 DiskLruCache;
4. 使用非UI线程加载图片,使用 AsyncTask;
5. 使用软引用SoftReference,绑定ImageView和url,处理ListView并发加载问
四.其他
Google官方教程(一定要读):
Android进程和线程-Processes and Threads
改善布局性能-Improving Layout Performance
1. 优化布局层次结构—Optimizing Layout Hierarchies
2. 使用标签include重用布局—Re-using Layouts with include
3. 按需加载视图—Loading Views On Demand
4. ListView的平滑滚动—Making ListView Scrolling Smooth
高效显示位图-Displaying Bitmaps Efficiently
1. 有效的处理较大的位图-Loading Large Bitmaps Efficiently
2. 处理来自UI线程的位图-Processing Bitmaps Off the UI Thread
4. 在你的UI中显示位图-Displaying Bitmaps in Your UI
其他好文章:
参考:
[原] Android持续优化 - 提高流畅度的更多相关文章
- Android持续优化 - 提高流畅度
http://www.cnblogs.com/purediy/archive/2013/12/26/3492865.html
- [原]Android开发优化-Adapter优化
ListView作为Android开发中使用频率最高的一个控件,保证ListView的流畅运行,对用户体验的提高至关重要.Adapter是ListView和数据源之间的中间人,当每条数据进入可见区时, ...
- iOS 优化界面流畅度的探讨
界面流畅度 大都跟list scrollView有紧密关联 流畅的视觉:就是如丝般顺滑 不流畅视觉:”卡顿”,”抖动”,”迟顿感” 以上两种状态的描述 都是基于主观感觉,对于开发者来说 确实应该有一个 ...
- [原] Android性能优化方法
GPU过度绘制 打开开发者选型,"调试GPU过度绘制",蓝.绿.粉红.红,过度绘制依次加深 粉红色尽量优化,界面尽量保持蓝绿颜色 红色肯定是有问题的,不能忍受 使用Hierarch ...
- iOS开发之多种Cell高度自适应实现方案的UI流畅度分析
本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...
- [原]Android官方图片加载利器BitmapFun解析
通过BitmapFun在项目中使用,结合代码了解一下BitmapFun加载图片的原理,以及最佳使用实践.本文说明不包括BitmapFun的缓存部分. Android开发在使用ListView和Grid ...
- 转:iOS开发之多种Cell高度自适应实现方案的UI流畅度分析
本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...
- Android 性能优化的方面方面都在这儿
又到周六了,鸿洋的不定期的周六放送又来了~~这次来谈谈性能优化吧.大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活.很多时候可能是策略上的调整,不过还是有 ...
- iOS---------查看界面的流畅度
iOS查看屏幕帧数工具--YYFPSLabel iOS 保持界面流畅的技巧 iOS 优化界面流畅度的探讨 先研究一下 改天自己出一篇文章
随机推荐
- 学习笔记——Maven实战(九)打包的技巧
“打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码.编译生成的字节码.配置文件.文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR ...
- 小白学习mysql之优化基础(EXPLAIN的连接类型)
## 导语很多情况下,有很多人用各种select语句查询到了他们想要的数据后,往往便以为工作圆满结束了.这些事情往往发生在一些学生亦或刚入职场但之前又没有很好数据库基础的小白身上,但所谓闻道有先后,只 ...
- js判断页面出现滚动条
当可视区域小于页面的实际高度时,判定为出现滚动条 当我们在获取页面的offsetHeight高度时是包括了浏览器的边框的,浏览器的边框是2个像素, if (document.documentEleme ...
- Future模式
Future模式简介 Future模式有点类似于网上购物,在你购买商品,订单生效之后,你可以去做自己的事情,等待商家通过快递给你送货上门.Future模式就是,当某一程序提交请求,期望得到一个答复.但 ...
- Ibatis学习总结4--SQL Map XML 映射文件扩展
SQL Map XML 映射文件除了上文提到的属性还有一些其他重要的属性,下文将详细介绍这些属性. 缓存 Mapped Statement 结果集 通过在查询 statement 中指定 cacheM ...
- Lucene -- 实时索引
lucene的实时搜索可以分成:实时和近实时的搜索. 实时只能依靠内存了. 近实时可以用lucene中提供org.apache.lucene.index.DirectoryReader.open(In ...
- python学习笔记4(对象/引用;多范式; 上下文管理器)
### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是储存在内存中的实体,对象名只是指向这一对象的引用(refere ...
- 【bzoj3150】 cqoi2013—新Nim游戏
www.lydsy.com/JudgeOnline/problem.php?id=3105 (题目链接) 题意 在第一个回合中,第一个游戏者可以直接拿走若干个整堆的火柴.可以一堆都不拿,但不可以全部拿 ...
- 5个最好的Python Web开发框架
Python是最受欢迎的和最有效率的开发语言之一.Python能让你更快完成工作,并且更有效地集成系统.Python是动态的面向对象的语言.即便你刚刚开始学习Python,也立即就能获得生产力上的提升 ...
- HD1281棋盘游戏(匹配+好题)
棋盘游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...