Android内存优化之三:打开MAT中的Bitmap原图

在使用MAT查看应用程序内存使用情况的时候,我们经常会碰到Bitmap对象以及BitmapDrawable$BitmapState对象,而且在内存使用上,Bitmap所占用的内存占大多数.在这样的情况下, Bitmap所造成的内存泄露尤其严重, 需要及时发现并且及时处理.在这样的需求下, 当我们在MAT中发现和图片相关的内存泄露的时候, 如果能知道是那一张图片,对分析问题会有很大的帮助.

本文就介绍如何将MAT中的Bitmap数组对象还原成一张图片。

Bitmap对象如图:

Bitmap对象

导出Bitmap原始数据

在MAT中打开Dominator Tree视图 , 选择一个Bitmap对象 , 查看此时右边的Inspector窗口,内容如下图:

image

这个视图中,可以看到这个Bitmap的一些基本的信息: mBuffer, mHeight, mWidth , mNativeBitmap等, 宽和高的值我们一会需要用的到 .

mBuffer的定义在Bitmap.java中:

1
2
3
4
5
6
7
8
9
/**
* Backing buffer for the Bitmap.
* Made public for quick access from drawing methods -- do NOT modify
* from outside this class
*
* @hide
*/
@SuppressWarnings("UnusedDeclaration") // native code only
public byte[] mBuffer;

其值是保存在byte数组中的, 我们需要的就是这个byte数组中的内容. 在Inspector窗口的mBuffer这一栏或者Dominator Tree视图的Bitmap这一栏点开下一级,都可以看到这个byte数组的内容. 鼠标右键选择Copy –>Save Value To File. 弹出如下对话框:

image

选择存储路径和文件名,这里需要注意的是,文件名一定要以 .data为后缀,否则无法正常使用,切记.

打开原始资源数据

Linux

这时需要借助Linux上强大的图片应用:GIMP,没安装的可以去安装一下. 安装好之后, 打开GIMP,选择文件-打开.选择我们上一步导出的.data文件(比如image.data),然后会出现如下图的属性框:

image

图像类型这一栏选择RGB Alpha, 宽度和高度必填, 其值可以在MAT中查看到,第一步的时候有说到这个值的位置, 其他的选择默认即可,然后点击打开. GIMP就会把这个文件打开.

Mac && Windows

Mac和Windows可以选择使用PhotoShop作为打开的工具, 和Linux唯一不同的地方在于. 保存的文件的格式需要以.raw结尾 (比如image.raw),选择深度为32位. 其余的和Linux相同.

另外GIMP也有Mac、Windows版本,建议大家在各个平台都使用GIMP,这样学习成本比较低,而且GIMP为免费软件,使用起来功能也非常多

Android 系统性能优化(39)---Android内存优化之三:打开MAT中的Bitmap原图相关推荐

  1. 【android学习】记录应用内存优化

    图片优化(效果最明显) 过度图片的回收  原因分析: 在做冷启动时候,很多人写一个如下 <style name="MainTheme" parent="@andro ...

  2. Android性能优化系列之内存优化

    在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(Garbage Collection,GC)完成的,程序员不需要通过调用函数来释放内存,但也随之带来了内存泄漏的可能,上篇博客,我介 ...

  3. iOS25个性能优化,和内存优化

    1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你 ...

  4. Android实现微信和QQ“在其他应用打开”列表中添加自己的应用,并获取文件路径。

    实现例如在微信QQ通过选中某个文件,选择其他应用的打开方式.效果如下: 1.在AndroidManifests中添加: <!--添加文件打开方式,可在第三方应用中将你的app加入打开方式列表-- ...

  5. Android系统性能优化(69)---含内存优化、布局优化

    Android性能优化:含内存优化.布局优化 前言 在 Android开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性.流畅性.稳定性等,是提高用户留存率的关键 本文全面讲解性能优 ...

  6. Android 系统性能优化(42)---Android代码内存优化建议-Android资源篇

    Android代码内存优化建议-Android资源篇 这篇文章主要介绍在实际Android应用程序的开发中,容易导致内存泄露的一些情况.开发人员如果在进行代码编写之前就有内存泄露方面的基础知识,那么写 ...

  7. Android 系统性能优化(38)---Android内存优化之二:MAT使用进阶

    Android内存优化之二:MAT使用进阶 第一篇文章<Android内存优化之一:MAT使用入门>介绍了MAT的基本使用方法,包括下载.安装.打开HPROF文件,和一些基本的视图.这篇文 ...

  8. 内存优化 · 基础论 · 初识 Android 内存优化

    [小木箱成长营]内存优化系列文章: 内存优化 · 工具论 · 常见的 Android 内存优化工具和框架 内存优化 · 方法论 · 揭开内存优化神秘面纱 内存优化 · 实战论 · 内存优化实践与应用 ...

  9. Android App优化:内存优化、电量优化、网络优化等 (2)

    -- 优化专题: 整理一系列的专题:比如APK瘦身.插件化.程序架构.性能优化.自定义view.增量升级.移动开发各种技术解决方案等.   Android后期发展的五大趋势:一.性能优化:二.高级UI ...

最新文章

  1. RabbitMQ启动参数具体含义
  2. CC2530-Zstack 协议栈MAC层中的mac_rx.c程序解读
  3. 认证篇——单向散列函数
  4. 视频直播/远程会议中的AI关键技术探索应用
  5. android最新版本 note8,三星Note8官方国行版安卓9固件rom升级包:CHC-N9500ZCS4DSF5
  6. Angular Table test
  7. OSI模型数据链路层为什么需要分层?
  8. 如何解决secureCRT里面的The remote system refused the connection.
  9. 蓝桥杯 BASIC-19 基础练习 完美的代价 Java版
  10. 准备接入个人支付接口?看完这几款支付产品再做决定!
  11. mvc:annotation-driven /
  12. Spring 中的 bean 生命周期(代码实现)
  13. 由于 Exception.tostring()失败,因此无法打印异常字符串
  14. 文件存储-CephFS
  15. 强大的多线程和倒计时程序
  16. 零基础入门编程神器!苹果的免费编程应用出了Mac版了
  17. 质子之死:粒子衰变如何推出万有理论
  18. 华为云弹性公网IP,如何解决现代企业的网络IP烦恼
  19. 从功能测试进阶自动化测试涨薪7k,终究是逼了自己一把...
  20. 劝退员工,你问过劳动合同法了吗?

热门文章

  1. graph slam tutorial :从推导到应用3
  2. java eclipse profile_在 Eclipse 中集成JProfiler 进行 JAVA 项目性能分析
  3. rest 怎么发送html,docusignapi - 是否可以使用REST API中的HTML创建Docusign模板? - 堆栈内存溢出...
  4. Matlab验证dtft共轭性质,数字信号处理实验4重点.docx
  5. 【LeetCode】【HOT】23. 合并K个升序链表(递归+分治)
  6. 【LeetCode】面试题 03. 数组中重复的数字
  7. Filter in Servlet
  8. maven ${path.separator}
  9. linux 切换用户身份、su、sudo、/etc/sudoers
  10. reload maven project' has encountered a proble 问题