一.形象的感官一下流畅度概念

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并发加载问

6. Android官方图片加载利器BitmapFun解析

四.其他

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

3. 缓存位图-Caching Bitmaps

4. 在你的UI中显示位图-Displaying Bitmaps in Your UI

其他好文章:

Android开发规范之编码规范

Android开发性能优化简介

参考:

1. 每秒帧数
2. 位图

[原] Android持续优化 - 提高流畅度的更多相关文章

  1. Android持续优化 - 提高流畅度

    http://www.cnblogs.com/purediy/archive/2013/12/26/3492865.html

  2. [原]Android开发优化-Adapter优化

    ListView作为Android开发中使用频率最高的一个控件,保证ListView的流畅运行,对用户体验的提高至关重要.Adapter是ListView和数据源之间的中间人,当每条数据进入可见区时, ...

  3. iOS 优化界面流畅度的探讨

    界面流畅度 大都跟list scrollView有紧密关联 流畅的视觉:就是如丝般顺滑 不流畅视觉:”卡顿”,”抖动”,”迟顿感” 以上两种状态的描述 都是基于主观感觉,对于开发者来说 确实应该有一个 ...

  4. [原] Android性能优化方法

    GPU过度绘制 打开开发者选型,"调试GPU过度绘制",蓝.绿.粉红.红,过度绘制依次加深 粉红色尽量优化,界面尽量保持蓝绿颜色 红色肯定是有问题的,不能忍受 使用Hierarch ...

  5. iOS开发之多种Cell高度自适应实现方案的UI流畅度分析

    本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...

  6. [原]Android官方图片加载利器BitmapFun解析

    通过BitmapFun在项目中使用,结合代码了解一下BitmapFun加载图片的原理,以及最佳使用实践.本文说明不包括BitmapFun的缓存部分. Android开发在使用ListView和Grid ...

  7. 转:iOS开发之多种Cell高度自适应实现方案的UI流畅度分析

    本篇博客的主题是关于UI操作流畅度优化的一篇博客,我们以TableView中填充多个根据内容自适应高度的Cell来作为本篇博客的使用场景.当然Cell高度的自适应网上的解决方案是铺天盖地呢,今天我们的 ...

  8. Android 性能优化的方面方面都在这儿

    又到周六了,鸿洋的不定期的周六放送又来了~~这次来谈谈性能优化吧.大家在工作中或多或少都会拿自家的应用和竞品app做比对,不可避免的需要做一些app性能优化的活.很多时候可能是策略上的调整,不过还是有 ...

  9. iOS---------查看界面的流畅度

    iOS查看屏幕帧数工具--YYFPSLabel iOS 保持界面流畅的技巧 iOS 优化界面流畅度的探讨 先研究一下     改天自己出一篇文章

随机推荐

  1. springmvc学习笔记(一)之简介

    一.简介 SpringMVC 是一个MVC框架,是基于Model-View-Controller模式实现的.类似于Struts2等mvc框架使数据-业务-展现很好的隔离开. 每当用户在web浏览器点击 ...

  2. 备份U盘分区表,未雨绸缪

    有时候,由于操作不当将U盘或者移动硬盘插入到电脑的时候会变成RAW格式,不可读取,这样的话就杯具了,只能用恢复软件试试看. 但是,如果一开始进行了备份的话,处理起来就简单多了. 用winhex打开U盘 ...

  3. 讲述一下自己在linux中配置ftp服务的经历

    本人大二小白一名,从大一下学期就开始接触到linux,当时看到学校每次让我们下载资源都在一个ftp服务器中,感觉特别的高大上,所以自己就想什么时候自己能够拥有自己的ftp服务器,自己放一点东西进去,让 ...

  4. jsoup抓取借书记录

    package tushuguan; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; ...

  5. ModernUI教程:第一个ModernUI应用(采用项目模板)

    在我们开始之前,请确保你已经为你的Visual2012或者2013安装了ModernUI for WPF的模板扩展: >>从Visual Studio 库 下载并安装VSIX扩展 > ...

  6. 工作的思考十五:升职前需要做的准备(TeamLeader)

    当一个人在公司的工作年限以及经验的积累到达一个程度的时候,升职其实是件高兴的事,但面临角色的转变需要提前做些准备的. 其实如果你对你的职业规划很清楚的话,那么你就应该在升职之前就会开始进行角色的转换. ...

  7. [设计模式] javascript 之 代理模式

    代理模式说明 说明:顾名思义就是用一个类来代替另一个类来执行方法功能,这个模式跟装饰模式有点相似,不一样的是,代理模式是代替客户初始化被代理对象类,而装饰模式采用接口或初装饰者参数引用的方式来执行的. ...

  8. 匿名函数自调用(IIFE)

    什么是匿名函数 Javascript中定义函数的方式有多种,函数直接量就是其中一种.如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数.好,看 ...

  9. 【POJ 2484】A Funny Game

    Description Alice and Bob decide to play a funny game. At the beginning of the game they pick n(1 &l ...

  10. Windows下一些配置信息

    VC.VS和.NetFramework版本对应关系 VC6.0对应VS 6.0 VC7.0对应VS 2002 VC7.1对应VS 2003 .Net Framework1.0/1.1 VC8.0对应V ...