节制的使用Service

如果应用程序需要使用Service来执行后台任务的话,只有当任务正在执行的时候才应该让Service运行起来。
当启动一个Service时,系统会倾向于将这个Service所依赖的进程进行保留,系统可以在LRUcache当中缓存的进程数量也会减少,导致切换程序的时候耗费更多性能。
我们可以使用IntentService,当后台任务执行结束后会自动停止,避免了Service的内存泄漏。

当界面不可见时释放内存

当用户打开了另外一个程序,我们的程序界面已经不可见的时候,我们应当将所有和界面相关的资源进行释放。
重写Activity的onTrimMemory()方法,然后在这个方法中监听TRIM_MEMORY_UI_HIDDEN这个级别,一旦触发说明用户离开了程序,此时就可以进行资源释放操作了。

当内存紧张时释放内存

onTrimMemory()方法还有很多种其他类型的回调,可以在手机内存降低的时候及时通知我们,我们应该根据回调中传入的级别来去决定如何释放应用程序的资源。

避免在Bitmap上浪费内存

读取一个Bitmap图片的时候,千万不要去加载不需要的分辨率。可以压缩图片等操作。

HashMap 优化

用 Android Studio 写代码时,经常会提示对 HashMap 的警告优化,推举我们使用 SparseArray 等。

  • SparseArray
    SparseArray比HashMap更省内存,在某些条件下性能更好,主要是因为它避免了对key的自动装箱(int转为Integer类型),它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据。
    SparseArray只能存储key为int类型的数据,同时,SparseArray在存储和读取数据时候,使用的是二分查找法。
    应用场景:数据量不大,最好在千级以内 + key必须为int类型
  • ArrayMap
    如果key的类型已经确定为int类型,那么使用SparseArray,因为它避免了自动装箱的过程,如果key为long类型,使用LongSparseArray。
    如果key类型为其它的类型,则使用ArrayMap。

作者:假装是程序猿丶
链接:https://www.jianshu.com/p/b66e18e1a9f3
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Android 内存优化相关推荐

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

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

  2. 【Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )

    文章目录 一.GestureDetector 创建与设置 二.GestureDetector 触摸事件传递 三.触摸滑动操作 四.惯性滑动操作 五.长图滑动组件代码示例 六.运行效果 七.源码及资源下 ...

  3. 【Android 内存优化】自定义组件长图组件 ( 获取图像宽高 | 计算解码区域 | 设置图像解码属性 复用 像素格式 | 图像绘制 )

    文章目录 一.获取图像真实宽高 二.计算解码区域 三.设置解码参数 内存复用 像素格式 四.图像绘制 五.执行效果 六.源码及资源下载 官方文档 API : BitmapRegionDecoder 在 ...

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

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

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

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

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

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

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

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

  8. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( JNI 传递 Bitmap | 获取位图信息 | 获取图像数据 | 图像数据过滤 | 释放资源 )

    文章目录 一.Bitmap 图像数据处理 二.Java 层 Bitmap 对象转为 JNI 层 bitmap 对象 三.获取 bitmap 中的图像数据 四.过滤 bitmap 中的图像数据 ( 获取 ...

  9. 【Android 内存优化】libjpeg-turbo 函数库交叉编译 ( libjpeg-turbo 函数库下载 | libjpeg-turbo 编译文档 | 环境准备 | NASM 安装 )

    文章目录 一. libjpeg-turbo 函数库下载与解压 二. libjpeg-turbo 编译文档 三. 编译前环境准备 四. 安装 NASM 汇编工具 1. 下载 NASM 汇编工具 2. 拷 ...

  10. 【Android 内存优化】Android 原生 API 图片压缩原理 ( 哈夫曼编码开关 | 哈夫曼编码原理 | libjpeg-turbo 函数库 )

    文章目录 一. 哈夫曼编码开关 二. 哈夫曼编码原理 三. libjpeg-turbo 函数库 四. libjpeg-turbo 函数库下载 [Android 内存优化]图片文件压缩 ( Androi ...

最新文章

  1. 自定义线程类中实例变量与其他线程共享与不共享
  2. javascript实现自动添加文本框功能
  3. SQL Server CLR全功略之一---CLR介绍和配置
  4. bzoj1036 树的统计Count 树链剖分
  5. Oracle在Linux平台安装时涉及的/etc/security/limits.conf
  6. Hook Windows API调用 C++
  7. SQLite和NPoco的数据库初始化器
  8. primefaces教程_Primefaces仪表板组件示例教程
  9. texstudio 使用方法_TeXstudio怎么使用,TeXstudio使用教程解析
  10. MOSS架构和共享服务(Shared Service)
  11. 深度学习caffe:最优化方法
  12. 剩余方差matlab,用matlab的var函数求方差
  13. linux 网络重组 分片 gso lro
  14. AddressBook、AddressBookUI、Contacts、ContactsUI 通讯录操作
  15. docker基础篇--有它就够了
  16. Python脚本25:将两张图片拼在一起
  17. 数据结构与算法课程设计
  18. 苹果服务器维护时间表2019,ios 内购详解(2019)
  19. 树莓派安装成功后,搜索不到自己的WIFI
  20. 感悟笔记(一)多思无益

热门文章

  1. python django框架 比php_ThinkPHP, Django这两个框架孰优孰略,忽略语言本身?
  2. python中参数的位置传递和名称传递各有什么优缺点_Python开发TCP和UDP的区别是什么?优缺点对比总结...
  3. php switch换界面,php switch的“高级”用法详解
  4. 二维空间有没有厚度_平面设计并不平!空间构成了解一下
  5. python中的class怎么用_对python 中class与变量的使用方法详解
  6. php发送指令,PHP发送AT指令实例代码
  7. python面试题之“该死的for循环系列”(二)
  8. 使用Eclipse EE(汉化版) 创建一个JavaWeb工程
  9. Redis数据类型操作(一) —— String
  10. vmware中修改ubuntu的分辨率