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

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. proxmox 之 与openstack的比较
  2. 3、编写一个prod()函数,可以接受一个list并利用reduce()求积
  3. 结对编程——四则运算
  4. java 解析 jar_解析java中对jar包进行再次修改
  5. Linux系统云主机教程,新开的linux云主机磁盘挂载教程
  6. 在react里写原生js_小程序原生开发与第三方框架选择
  7. java lambda例子_Java lambda 表达式常用示例
  8. java asynccontext,超时后的JavaEE 6 AsyncContext行为
  9. 论文浅尝 - ACL2022 | 面向推理阅读理解的神经符号方法
  10. java aopalliance-1.0.jar这个包是做什么用的?
  11. linux内核disabled,Linux内核关闭IPv6协议的方式
  12. 改变图像的对比度和亮度
  13. Presto 日期和时间函数
  14. Erlang 之父两点忠告:不要在疲惫时写代码、先思考再编程
  15. [Zinnia][Windows]手写输入法的一些研究
  16. java给链表赋值_java链表的各种操作
  17. artDialog--经典的网页对话框组件
  18. 2020互联网公司中秋礼盒大比拼(22家互联网厂商)
  19. IP 地址由网络和主机两部分标识组成
  20. 计算机怎么切换到音乐,win10系统如何快速切换到下一首歌曲?

热门文章

  1. python 字符串前加u r b的意义
  2. Node基础: 回调函数 2
  3. eclipse中一个项目引用另一个项目的方法
  4. python习题:写一个备份数据库的脚本
  5. 〖Python〗-- 性能相关及深度优先与广度优先
  6. vue实现简单表格组件
  7. C#中的is和as操作符
  8. Looping over the databases on a server
  9. 前端ajax封装对象数组,后台的取法
  10. 如何快速重置打印队列