文档章节

Android中Bitmap占多大内存

_
 _OUTMAN_
发布于 2017/01/05 18:32
字数 328
阅读 8
收藏 0

Android API中有个方便的方法,可以计算Bitmap在运行中占多大内存。

public final int getByteCount() {
    // int result permits bitmaps up to 46,340 x 46,340
    return getRowBytes() * getHeight();
}

那给一张图片,如何不通过代码如何知道占用的内存大小呢?

1. 我们知道图片使用色彩格式的,在Android中主要有以下几种

ALPHA_8 代表8位Alpha位图,就是Alpha由8位组成
ARGB_4444 代表16位ARGB位图,就是由4个4位组成
ARGB_8888 代表32位ARGB位图,就是由4个8位组成
RGB_565 代表8位RGB位图,就是R为5位,G为6位,B为5位共16位

2. 在Android中,图片资源可以放在不同的drawable下,会导致图片的density不同。inDensity

hdpi 240 xhdpi 320 xxhdpi 480 间隔是160

3. 每个手机屏幕的density,就是屏幕每英寸对应多少个点(不是像素点)。inTargetDensity

综上,一个图片在Android占内存的大小,计算方式如下:
width * (inTargetDensity / inDensity) * height * (inTargetDensity / inDensity) * ARGB

那么如何减少Bitmap占用内存的大小呢?

使用BitmapFactory.Options设置解析图片的参数

1. 使用inSimpleSize

2. 使用矩阵Matrix

3. 合理选择像素格式

详细可以参考 http://bugly.qq.com/bbs/forum.php?mod=viewthread&tid=498

© 著作权归作者所有

_
粉丝 22
博文 133
码字总数 63959
作品 0
海淀
程序员
私信 提问
高效使用Bitmaps(一) 大Bitmap的加载

高效使用Bitmaps有什么好处? 我们常常提到的“Android程序优化”,通常指的是性能和内存的优化,即:更快的响应速度,更低的内存占用。Android程序的性能和内存问题,大部分都和图片紧密相关...

扔物线
2013/12/10
18.4K
7
Android:内存控制及OOM处理

OOM(内存溢出)和Memory Leak(内存泄露)有什么关系? OOM可能是因为Memory Leak,也可能是你的应用本身就比较耗内存(比如图片浏览型的)。所以,出现OOM不一定是Memory Leak。 同样,Mem...

Xushao
2013/05/07
840
1
Android 性能篇 - 内存优化

内存优化是一个程序员的基本功。有时也要切合项目的实际需求来做选择。 一、解决所有的内存泄漏 内存泄漏概念: 不再使用的对象没有被回收,就是内存泄露。 单利泄漏 主要原因还是因为一般情...

技术小能手
2018/07/05
0
0
Android Bitmap变迁与原理解析(4.x-8.x)

App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap,它是Android中最能吃内存的对象之一,也是很多OOM的元凶,不过,在...

看书的小蜗牛
2018/05/22
0
0
bitmap的六种压缩方式,Android图片压缩

转载请注明出处,谢谢:http://blog.csdn.net/harryweasley/article/details/51955467 Android中图片是以bitmap形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小,首先要知道b...

guozhendan
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Guava 3: 集合Collections

正文 一、引子 Guava 对JDK集合的拓展,是最成熟且最受欢迎的部分。本文属于Guava的核心,需要仔细看。 二、Guava 集合 2.1 Immutable Collections不可变集合 1.作用 用不变的集合进行防御性...

孟飞阳
12分钟前
2
0
源码分析 RocketMQ DLedger 多副本存储实现

RocketMQ DLedger 的存储实现思路与 RocketMQ 的存储实现思路相似,本文就不再从源码角度详细剖析其实现,只是点出其实现关键点。我们不妨简单回顾一下 CommitLog 文件、ConsumeQueue 文件设...

中间件兴趣圈
16分钟前
2
0
vue入门--简单路由配置

本文转载于:专业的前端网站➜vue入门--简单路由配置   在初始化vue init webpack <工程名>时,有一步是询问是否安装vue-router,选择yes,如果没有安装的话,后面需要自己安装。然后在目录...

前端老手
47分钟前
5
0
怎么给视频配音

很多刚开始尝试视频制作的小伙伴,帮助到怎么给制作完成的视频配音,其实给视频配音的方法非常简单,在手机上可以进行制作,下面一起来看看给视频配音的方法吧! 具体步骤如下: 1、首先在手...

白米稀饭2019
56分钟前
4
0
windows批处理bat脚本编写

什么是bat脚本 .bat结尾的文件其实就是windows上的批处理脚本,Windows中的bat文件相当于 Linux中shell编程的.sh脚本,批量执行DOS命令。 其最简单的例子,是逐行书写在命令行中会用到的各种...

孙幼凌
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部