| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> Android 内存优化(二)——内存优化策略 -> 正文阅读 |
|
[开发测试]Android 内存优化(二)——内存优化策略 |
提示:本篇博客是个人学习的总结,有什么问题请及时联系本人qq1521976977 前言在开始之前需要先搞明白一个问题,为什么要做内存优化?或者说做内存优化的目的是什么? 一、内存优化策略内存优化一般从两个方向着手优化,一方面就是上篇博客写的防止内存泄漏,避免不必要的内存资源浪费;另一方面就是APP中大对象的优化,减小大对象占用的内存。 二、具体优化的点1.避免内存泄漏这里直接看上篇博客就行: 2.Bitmap等大对象的优化策略图片加载算是内存占用的罪魁祸首,而且也是最常见的,所以优化bitmap的占用内存是很关键的。
比如说一个 1920 * 1080 的图片,它所占用的内存就是1920 * 1080 * 单个像素点内存。因此,对于Bitmap的优化就可以从分辨率和单个像素点两个方面来进行优化。 (1) 优化Bitmap分辨率
(2) 优化单个像素点内存 在 Android 的 Bitmap 中单个像素点占用的内存与 Bitmap 的 inPreferredConfig 参数配置有关系,代码设置如下:
options.inPreferredConfig = Bitmap.Config.RGB_565;设置的参数如下表:
在Android系统中 Bitmap 的默认色彩模式为 ARGB_8888, 即每个像素占用了4byte,那么在默认情况下,一张分辨率为1920 * 1080 的图片,加载到内存后占用的内存大小为1920 * 1080 * 4 = 7.91M 可以通过设置 inPreferredConfig 参数来设置对应的色彩模式,例如,一个不包含透明通道的图片,我们可以将其设置为RGB_565,即保证了图片的质量,又减少了内存的占用。 (3) Bitmap的缓存策略 (4) drawable资源选择合适的drawable文件夹存放 (5) 其他大对象的优化 (6) 避免内存抖动 比如在绘制自定义View的时候一定要避免在onDraw或者onMeasure中创建对象。 3.原生API回调释放内存Android系统提供了一些回调来通知当前应用的内存使用情况,比如下边的两个方法: onLowMemory() 通常来说,当所有的Background应用都被kill掉的时候,forground应用会收到onLowMemory()的回调。在这种情况下,需要尽快释放当前应用的非必须的内存资源,从而确保系统能够继续稳定运行。尤其是要释放Glide中缓存的Bitmap资源,通过调用Glide.onLowMemory方法进行资源回收。 onTrimMemory() Android系统从4.0开始还提供了onTrimMemory()的回调,当系统内存达到某些条件的时候,所有正在运行的应用都会收到这个回调,同时在这个回调里面会传递以下的参数,代表不同的内存使用情况,收到onTrimMemory()回调的时候,需要根据传递的参数类型进行判断,合理的选择释放自身的一些内存占用,一方面可以提高系统的整体运行流畅度,另外也可以避免自己被系统判断为优先需要杀掉的应用。例如调用Glide.onTrimMemory()来进行bitmap的回收。 3.内存排查工具(1)LeakCanary监测内存泄漏 (2)通过Proflier监控内存 (3)通过MAT工具排查内存泄漏 总结平时开发对于这块的关注不是很多,可能在没有出现内存不足的问题前不会考虑这些,项目的要求没有那么高,学习过这些点以后需要在开发中慢慢关注这些问题。 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 0:46:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |