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

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性能优化——界面流畅度优化

    Android性能优化--界面流畅度优化 序言 首先流畅度不仅仅是受到代码的影响.也会跟机器的硬件配置有关系.所以第一点需要明确的是,流畅度最低保证在哪个硬件配置之上.这样有了一个基点之后,才能比较好 ...

  2. Android应用优化之流畅度优化实操

    上一篇流畅度概念向大家详细地描述了VSync机制和Choreographer编舞者的用法.可能所讲解的内容偏向理论概念,因此这篇是流畅度优化实操,整篇主要分三层,UI层.代码逻辑层.IO层来讲述各个优 ...

  3. Android应用优化之流畅度实操

    @android:color/black @color/app_frame_bg_color 但是在布局页面,设计人员设计的底色,根本不是默认的背景色,如果我们在这个页面的根布局再设一个背景的话就是多 ...

  4. Android App界面和流畅度优化

    Android App界面和流畅度优化 所谓界面和流畅度优化,就是尽可能多地消除用户可直接感知的.影响用户操作体验的bug 1.人为在UI线程中做轻微耗时操作,导致UI线程卡顿 人为避免一切耗时操作 ...

  5. android 手写 流畅,提高Android应用手写流畅度(基础篇)

    在使用android类的手写应用时,整体上都有这样一个印象:android的手写不流畅.不自然,和苹果应用比起来相差太远.本文结合作者亲身经历,介绍一下有效提高手写流畅度的几种方法: 1.未做任何处理 ...

  6. android动画帧率_Android流畅度之帧率

    背景:app改版,人为感受卡顿,需要客观数据支撑观点.故,搜索各种性能指标,并理解之.(这是一篇摘要文......) 首先,明确人为感受的性能不好属于下面哪种: 1. 响应时间,界面跳转后响应时间: ...

  7. 【Android性能】【流畅度】概念初识

    小菜鸡最近想在性能测试方面多了解一些,因此先了解了一下安卓性能中的流畅度相关概念,本文章纯理论概念,暂不涉及对应的代码机制,后面再慢慢补- 主要参考了以下两篇大佬文章,内容可能存在高度重复,仅作为学习 ...

  8. 如何用 GPU 硬件层加速优化 Android 系统的游戏流畅度

    作为一款VR实时操作游戏App,我们需要根据重力感应系统,实时监控手机的角度,并渲染出相应位置的VR图像,因此在不同 Android 设备之间,由于使用的芯片组和不同架构的GPU,游戏性能会因此受到影 ...

  9. 如何用 GPU硬件层加速优化Android系统的游戏流畅度—应用性能管理

    作为一款VR实时操作游戏App,我们需要根据重力感应系统,实时监控手机的角度,并渲染出相应位置的VR图像,因此在不同 Android 设备之间,由于使用的芯片组和不同架构的GPU,游戏性能会因此受到影 ...

最新文章

  1. 手动脱壳—dump与重建输入表(转)
  2. H3C 静态默认路由配置
  3. 删除中间结点(直接用来当前节点操作)
  4. python dicom 器官分割_图像识别 | 使用Python对医学Dicom文件的预处理(含代码)
  5. oracle 函数索引
  6. phalcon无限重定向
  7. java千万用户实现实时排名_想知道谁是你的最佳用户?基于Redis实现排行榜周期榜与最近N期榜...
  8. Python笔记-Flask结合SQLAlchemy查询MySQL数据库
  9. 集群和分布式部署有什么区别?
  10. LibreOffice去重复数据
  11. jmeter 聚合报告说明_Jmeter 测试结果分析之聚合报告简介
  12. Linux下强制某登录用户下线
  13. 2015年国民经济和社会发展统计公报
  14. 城市场景车路协同网络需求研究
  15. 海思Hi3516--移动侦测原理与理解
  16. 计算机无法安装hp网络打印机,hp打印机驱动安装失败怎么办 hp打印机驱动安装失败的解决办法...
  17. xml和接口简单理解
  18. 分享学JavaScript的第十天
  19. ros-noetic-yocs-cmd-vel-mux
  20. g77、gfortran、gcc的区别与联系

热门文章

  1. 【QT】二进制读取图像文件测试
  2. 4月22日MySQL学习
  3. eclipse中一个项目引用另一个项目的方法
  4. 解决spark中遇到的数据倾斜问题
  5. PHP+mysql+ajax搭建图书管理系统
  6. linux系统的初化始配置
  7. Vue中的基础过渡动画原理解析
  8. 使用 Electron 从协议处理器启动应用程序
  9. highcharts常用配置说明
  10. Delphi_04_Delphi_Object_Pascal_基本语法_02