1.对象池

内存优化不仅要防止内存泄露,也要注意频繁GC卡顿、内存抖动以及不必要的内存开销造成的内存需求过大或者内存泄露。

比如,如果有大量临时对象的创建该如何处理呢?

首先要确定问题发生的原因,对象频繁创建一般有以下几种可能:

①在循环操作中创建对象

②在频繁被调用的方法中创建对象

例如:在onDraw中使用一些对象,由于onDraw方法会被程序频繁调用,所以不能在onDraw方法里创建对象实例,可以考虑在onDraw方法外提前初始化这些对象。

能直接避免对象的频繁创建当然最好,但是有时候这些对象的初始化是不可避免的,这时就要考虑对象的复用,可以采用对象池来解决问题。对象池可以很好的复用对象,避免频繁创建和销毁。

对象池的目的就是减少频繁创建和销毁对象带来的成本,实现对象的缓存和复用。当创建对象的成本比较大,并且创建比较频繁时,就需要使用对象池了。

Android中对象池的应用有很多,比如:

①Handler处理的Message(在handler发送消息时,Message的初始化经常会用 Message.obtain()来实例化Message对象)

②线程池执行器ThreadPoolExecutor

③Glide

④控制TypedArray的Resources

虽然它们对线程池的实现方式不同(Message使用链表、Glide使用Map),但原理是一样的,即初始化一个固定大小的池子,每次创建对象时先去池子中找有没有,如果有直接取出,没有就new出来,使用后还到池子里。这样便可达到对象复用的目的。

Android 内存优化-对象池★相关推荐

  1. 【Android 内存优化】Bitmap 图像尺寸缩小 ( 考虑像素密度、针对从不同像素密度资源中解码对应的 Bitmap 对象 | inDensity | inTargetDensity )

    文章目录 一.像素密度对解码图片的影响 二.不考虑像素密度会导致图片缩小尺寸不准确 三.DisplayMetrics 源码阅读.研究手机资源获取规则 四.像素密度参数设置取值 ( inDensity ...

  2. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )

    文章目录 一.使用 libjpeg-turbo 压缩图片流程 二.初始化 JPEG 压缩对象 三.打开文件 四.设置压缩参数 五.开始压缩 六.循环写入压缩数据 七.完成图片压缩及收尾 八.libjp ...

  3. 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( MAT 工具使用 | 最大对象 | 类实例个数 | 引用与被引用 | GC Roots 最短链 )

    文章目录 一. 内存中最大的对象 二. 查看每个类的对象实例的个数 三. 查看对象的引用与被引用 四. 查看对象到 GC Roots 的最短距离 1. 选择 Merge Shortest Paths ...

  4. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  5. 【Android 内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitmap 示例 | DiskLruCache 开源库 | 代码示例 )

    文章目录 一.Google 官方 Bitmap 相关示例参考 二.磁盘缓存类 DiskLruCache 三.磁盘缓存初始化 四.存储数据到磁盘缓存中 五.从磁盘缓存中读取数据 六. Android 1 ...

  6. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )

    文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...

  7. 【腾讯Bugly干货分享】Android内存优化总结实践

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:https://mp.weixin.qq.com/s/2MsEAR9pQfMr1Sfs7cPdWQ 导语 智 ...

  8. 深入探索Android内存优化

    前言 成为一名优秀的Android开发,需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样~. 本篇是Android内存优化的进阶篇,难度会比较大,建议对内存优化不是非常熟悉的前仔细看看在 ...

  9. Android内存优化汇总

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...

最新文章

  1. 《我也能做CTO之程序员职业规划》写作过程重播之二
  2. 开发板A/D转换原理
  3. HTML5新增表单验证
  4. Go Mysql Driver 集成 Seata-Golang 解决分布式事务问题
  5. 确认了!西湖大学将开始招收本科生:首批五个专业
  6. 在linux下使用udev获取热插拔(hotplug)事件
  7. WTM系列视频教程:CodeFirst
  8. 随想录(内存屏障示例代码)
  9. 探索私有云OpenStack管理选项
  10. 程序员应该具备的12种能力
  11. 【观点讨论与支撑】明星和成功人士真的就只有成功的一面吗?背后的心酸和痛苦的经历我感觉更重要!
  12. Atitit 调用另外语言的功能 目录 1. Waht 常见的语言java python js sql xml h5 c# php等之间的互相调用 1 2. 为什么需要互相调用why 1 3. 常
  13. windows利用iis配置反向代理实现ECS内网互通oss
  14. ALINETEK 2.8寸 TFTLCD驱动原理
  15. os.system和os.popen函数的区别
  16. 【设计】1359- Umi3 如何实现插件化架构
  17. 大数据平台架构包含哪些功能
  18. 解压rar/zip工具类
  19. 随笔---XXXIII
  20. 迪米特法则(最少知道原则)

热门文章

  1. Float保留一位小数,四舍五入
  2. C++虚继承和虚基类
  3. 网站子域名扫描的几种方法
  4. FFN MLP dense 权重矩阵 全连接
  5. 接触了这款沙盒,我从月收入三千到三万
  6. 模仿苹果手机屏保滚动条
  7. 婚礼上新郎经典发言稿(绝对感动)
  8. 共阴、共阳数码管编码表
  9. 微信公众号运营怎么做:这些小技巧,新手也可操作
  10. java二叉排序树_数据结构与算法—二叉排序树(java)