GPU分析办法:

先定位问题原因、后寻找解决办法、最后验证多种办法的解决效果。卡顿问题快速定位的方法:

1. 打开开发者模式中GPU呈现模式分析,查看是那种颜色条高:

2. 如果是蓝色偏高,说明是单位消息里CPU太耗时,得把方法的执行都打出来看看哪个耗时。

3. 如果红色偏高,说明GPU忙不过来。优化过渡绘制,使用离屏缓存来优化。

4. 黄色偏高,说明半透明GPU不仅在忙着绘制你的window也还忙着绘制别的,可能的情况为透明window叠加多了,window里的contentView有多个且相对复杂,或者GPU降频了等等,想具体分析需要查看GPU的trace。

图片列表优化思路:

内存图片缓存还是有三级:一级是bitmap列表,一级是LRU强引用,一级是弱引用。加载图片时,先在弱引用缓存和LRU强引用中查找没有被释放的bitmap,如果存在并满足复用条件,则不创建bitmap,而使用该图片内存,之后将其从弱引用或者LRU中移出放入bitmap列表强引用中。bitmap列表强引用保存了该图片依赖的直接控件。当view的onDetachedFromWindow被调用则从bitmap列表中移除只有依赖该view的对象到LRU强应用中。如果LRU强引用满了则放到弱引用中。

Service保活思路:

先从老式最基础的开始:1.使用startService方式启动一个独立进程的服务,这样系统会在service意外死亡后自动重启。2. 使用RTC定时闹钟每5分钟检测一下(4.0以上基本无效)3.启动linux守护进程,每几分钟检测一下进程是否存在,不存在就startService(5.0以下除MIUI和华为外有效) 4. 5.0以上使用JobScheduler代替闹钟定时检测启动 5. 启动隐藏的前台通知。但这些措施都不能100%保活。

关于软件离屏缓存和硬件离屏缓存

系统默认所有的绘制都在一个内存块进行,通过canvas的matrix栈来控制绘制每个View的绘制区域,让系统再次创建一个内存块来绘制的方法有View的setLayerType(),可以在内存或者是GPU上创建一块内存,先绘制到该内存上,然后绘制到系统的那个内存上。

setLayerType(View.LAYER_TYPE_SOFTWARE, null); 启动软件离屏缓存

setLayerType(View.LAYER_TYPE_HARDWARE, null); 启动硬件离屏缓存(硬件加速)

内存上Bitmap绘制比硬件加速下绘制慢了30倍

所以如果多个bitmap是在一个View的onDraw方法绘制的,那么只需要在View的构造方法里添加setLayerType(View.LAYER_TYPE_HARDWARE, null);可大大提升绘制效率。

一般使用离屏缓冲是为了节省GPU执行录制的绘制命令的时间,比如你的绘制操作很多,而且执行这些绘制时缓冲是有效的,比如平移整个listView。

如果你看到你的GPU柱状条中的红色很高,这时可以考虑使用硬件离屏缓冲

一般在创建硬件离屏缓冲的时候,创建的那一帧是比较耗时的,所以你的动画里有个条线比较高,但可以规避让其不影响动画性能。比如在动画开始之前开启离屏缓存。

关于软引用的梗

在android低版本上,SoftwareRefrence是遵循java标准的GC回收流程,即只有触发GC的情况为内存不足时,才会去检查SoftReference,但在高版本上,SoftReference被检查的更频繁了,即不是只有内存不足时才去检查,其存在的概率与WeakReference接近。

android 开启离屏缓存,Android性能优化笔记(持续更新帖)相关推荐

  1. SQL性能优化整合持续更新

    性能优化是面试.程序员之间交流的重要话题.数据到了一定量级后和用户达到一定数量频繁的请求某些数据查询等操作表,数据库是成为优化的必经之路.众说纷纭,打算从表设计到查询.业务操作等方面入手.数据库从设计 ...

  2. 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记! .

    http://blog.csdn.net/xiaominghimi/article/details/6127578 http://www.androidegg.com/portal.php?mod=v ...

  3. 【Android游戏开发十五】关于Android 游戏开发中 OnTouchEvent() 触屏事件的性能优化笔记! ....

    http://blog.csdn.net/xiaominghimi/article/details/6127578 http://www.androidegg.com/portal.php?mod=v ...

  4. 【深度学习】基于 Alluxio 数据缓存的性能优化

    作者 | 车漾(阿里云高级技术专家).顾荣(南京大学 副研究员) 导读:Alluxio 项目诞生于 UC Berkeley AMP 实验室,自开源以来经过 7 年的不断开发迭代,支撑大数据处理场景的数 ...

  5. 并发环境下的缓存容器性能优化(上):不可变的哈希表

    我们在项目中经常会遇到这样的场景:一些信息读取开销较大,但只需要生成一次便可反复使用,因此我们会将其永久地缓存起来.例如在ASP.NET MVC中,系统会根据Controller的名称来缓存对应的元数 ...

  6. CPU缓存与性能优化

    CPU缓存与性能优化 如何通过提升CPU缓存的命中率来优化程序的性能? 极客时间 - 陶辉 - CPU缓存:怎样写代码能够让CPU执行得更快? https://time.geekbang.org/co ...

  7. U3D开发性能优化笔记(待增加版本.x)

    Amir Fasshihi 优化方案: 一.遇到麻烦时要调用"垃圾回收器"(Garbage Collector,无用单元收集程序,以下简称GC) 由于具有C/C++游戏编程背景,我 ...

  8. ActiveMQ性能优化笔记

    ActiveMQ性能优化笔记 队列的类型 环境搭建 踩到的坑 消息入队的性能 消息持久化 同步/异步发送消息 acitveMQ服务器通信方式 消费者消费 optimizeACK 以前都是看看消息队列的 ...

  9. ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示版本迭代持续更新

    ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示版本迭代持续更新 ✨版本更新说明:✨

  10. 爱下载分享seo必经之路之搜索引擎优化算法持续更新

    你务必掌握一些比较敏感行业! 搜索引擎优化算法持续更新,考核评价系统软件逐步完善.很多优化方式都会持续降低他们的占比,并且已经开发的评定系统软件.比如,在extrampking时期,评分也在降低,但这 ...

最新文章

  1. Django 第三方引用富文本编辑器6.1
  2. 通过windows系统封杀IP与端口
  3. laravel的carbon日期函数创建指定的now()日期以及遇到的一些坑
  4. 【迁移学习(Transfer L)全面指南】方差、协方差和Pearson相关系数的关系
  5. 面试之索引---------如果不能吊打面试官,找我扯皮*
  6. linux 源码 在线浏览,Linux下实现文档在线浏览
  7. u6系统服务器启动不了,u6链接不到服务器
  8. 同级选择器_10-CSS3选择器详解
  9. Android App应用包增量升级(one)
  10. TypeError: Fetch argument has invalid type class ‘numpy.float32‘, must be a string or Tensor
  11. vs中git工具的使用
  12. 入侵大型网站的完整思路
  13. ckfinder php 配置,PHP中配置Ckeditor+Ckfinder 完成图片上传
  14. 英读廊——一个人的旅行:原汁原味希腊克里特游记
  15. 读《把时间当作朋友:运用心智获得解放》
  16. ios文件和文件夹管理
  17. Linux下线程池概念详解以及代码演示
  18. 基于Python实现Jacobi迭代法、Gauss-Seidel迭代法和SOR法方程组(一)
  19. Java五子棋(2)
  20. SQL中Round函数没有四舍五入原因及处理方法

热门文章

  1. 黑马程序员传智播客迭代器和循环生成fibonacci数列
  2. 190331每日一句
  3. 《图解算法》学习笔记之递归
  4. Atitit 自然语言处理(NLP)的应用 与 搜索引擎 目录 1.1. 搜索引擎并不是自然语言处理(NLP)的唯一应用。 2 1.2. NLP的应用 2 1.3. 社交网站信息流, 2 1.4.
  5. Atitit 聚合搜索多个微博 attilax总结
  6. atitit 项目硬件平台选型attilax总结4blg.docx
  7. paip.java桌面开发应用与WEB RIA应用
  8. paip.SVN无法提交--提示冲突的解决
  9. 配置国内免费registry mirror -daocloud、网易、阿里云和七牛
  10. 五种开源API网关实现组件对比