文档章节

Android -- 使用inBitmap要注意的地方

 红豆与绿豆
发布于 2015/10/15 11:09
字数 456
阅读 199
收藏 1

SDK版本

需要注意的是inBitmap只能在3.0以后使用。2.3上,bitmap的数据是存储在native的内存区域,并不是在Dalvik的内存堆上。

 

android3.0开始,系统在BitmapFactory.Options里引入了inBitmap机制来配合缓存机制。如果在载入图片时传入了inBitmap那么载入的图片就是inBitmap里的值。这样可以统一有缓存和无缓存的载入方式。

 

使用inBitmap,在4.4之前,只能重用相同大小的bitmap的内存区域,而4.4之后你可以重用任何bitmap的内存区域,只要这块内存比将要分配内存的bitmap大就可以。例如给inBitmap赋值的图片大小为100-100,那么新申请的bitmap必须也为100-100才能够被重用。从SDK 19开始,新申请的bitmap大小必须小于或者等于已经赋值过的bitmap大小。

 

解码

新申请的bitmap与旧的bitmap必须有相同的解码格式,例如大家都是8888的,如果前面的bitmap8888,那么就不能支持4444565格式的bitmap了,不过可以通过创建一个包含多种典型可重用bitmap的对象池,这样后续的bitmap创建都能够找到合适的“模板”去进行重用。

 

DisplayingBitmaps

Managing Bitmap Memory 上的demoDisplayingBitmaps.zip,代码也有用到inBitmap,但是DisplayingBitmaps功能还是很弱,因为遇到过不同的ImageView设置不同ScaleType,然后使用同一张图片会造成相互影响,设置图片圆角也是,所以这也是使用inBitmap要注意的地方。

 

使用

使用此方法需要inMutable=trueinSampleSize=1

 

测试

开发完APP最好用一些APP在线自动化测试工具进行一下测试:www.ineice.com


© 著作权归作者所有

粉丝 3
博文 49
码字总数 21798
作品 0
南昌
私信 提问
关于Bitmap中的inBitmap变量的学习与使用

inBitmap是在BitmapFactory中的内部类Options的一个变量,简单而言,使用该变量可以复用旧的Bitmap的内存而不用重新分配以及销毁旧Bitmap,进而改善运行效率。 关于Bitmap的相关知识可以查看...

JerryLin123
03/08
505
0
运行Robolectric(一)

由于Robolectric是在项目开发过程中引入的,所以要跑起来时就遇到了各种问题,下面整理一下运行过程中个人遇到的问题和解决方法。 一、 现象: java.lang.IllegalStateException: there mus...

HCMore
2013/12/17
641
0
Glide高级详解—缓存与解码复用

Glide 使用简明的流式语法API,大多数情况下,可能完成图片的设置你只需要: 在调用into之后,Glide会首先从Active Resources查找当前是否有对应的活跃图片,没有则查找内存缓存,没有则查找...

codeGoogle
2018/05/07
0
0
onSaveInstanceState和onRestoreInstanceState的用处

很多不明白Activity类中包含的onSaveInstanceState和onRestoreInstanceState有什么用,首先 Android123声明下使用这两个方法时一定要注意情况和了解Activity的生命周期,否则有的时候 onSave...

鉴客
2011/12/19
314
0
Android开发_微信分享功能

在你的app应用里增加微信分享的功能,可以分享给好友、朋友圈。 首先,看官方文档这是必须的: 微信Android终端SDK新手使用指南http://open.weixin.qq.com/document/gettingstart/android/?...

mstian06
2013/12/20
27.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
4
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
6
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
4
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
992
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部