android 图片内存管理
图片对象: drawable bitmap etc.
图片对象在Android上该缓存吗?什么时候缓存?怎么缓存?缓存后使用时怎么取出?怎么销毁?什么时候销毁?
bitmap对象(new出来的) :需要回收吗? 什么时候回收? 放入view中的bitmap对象需要回收吗?
imageview 加载网络图片时,怎样设置加载中及加载失败后的图片?
若事先设置backgroud/src ,当加载网络图片失败后 imageview 为空?
if (imgView.getDrawable() == null) { //获取的是 src
Toast.makeText(getActivity(), 图片加载失败, Toast.LENGTH_SHORT).show();
imgView.setImageDrawable(getResources().getDrawable(R.drawable.icon));
}
从网络加载的图片的缓存 销毁 等等.
OOM 内存溢出 内存heap size限制
内存怎么计算? 图片大小
图片三级缓存: 网络、内存、本地 LruCache
当一个activity奔溃后 自动返回上一个activity 后从新加载资源?
// 获取到可用内存的最大值,使用内存超出这个值会引起OutOfMemory异常。
// LruCache通过构造函数传入缓存值,以KB为单位。
int maxMemory = (int) Runtime.getRuntime().maxMemory() / 1024 ; //获取分配内存
int cacheSize = maxMemory / 8; //缓存大小
private LruCache<String, Bitmap> mMemoryCache = new LruCache<String, Bitmap>(cacheSize){
protected int sizeOf(String key, Bitmap bitmap){
// 重写此方法来衡量每张图片的大小,默认返回图片数量。
return bitmap.getByteCount() / 1024;
}
};
background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸
scaleType只对src起作用;bg可设置透明度
setImageResource与xml中的src的属性相匹配, 而setBackgroundResource与xml中background对应
Bitmap真正的位图数据是在ndk中用c写的,所以用setCallback是不能销毁位图数据的,应该调用Bitmap的recycle()来清理内存。
需要手动释放的bitmap图像通常都是不放入控件中的bitmap,
也就是说没有其他的对象对该bitmap继续保持引用了,此时调用recycle手动释放bitmap资源。
若一个drawable,bitmap做为图片资源放入程序的view(例如做为ImageView的resource)中,
那么此时不需要手动释放资源了,系统会在该view销毁时帮你释放掉该资源的。
特殊情况是,一个对象不能被释放是因为这个对象被其他的对象所引用,导致系统不敢回收,
例如声明了一个static Drawable对象,并且绑定了资源图片。此时如果我们想最大利用内存,
尽量减少过期或者临时不需要的对象在内存中迟迟不能被回收,
这时我们就考虑用drawable.setCallback(null)来消除这个drawable的引用。
但是尽量不要这样使用static Drawable,如果忘记回收,极易造成内存泄漏!
android对于直接通过资源id载入的资源其实是做了cache的了,
这样下次再需要此资源的时候直接从cache中得到,这也是为效率考虑。但这样做也造成了用过的资源都会在内存中
android 图片内存管理的更多相关文章
- Android 之 内存管理-查看内存泄露(三)
概述 在android的开发中,要时刻主要内存的分配和垃圾回收,因为系统为每一个dalvik虚拟机分配的内存是有限的,在google的G1中,分配的最大堆大小只有16M,后来的机器一般都为24M,实在 ...
- 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩
百度网盘地址:https://pan.baidu.com/s/1jI4xZgE 我给起的书名叫做<深入理解Android虚拟机内存管理>.本书分为两个部分,前半部分主要是我对Linux0. ...
- Android app内存管理的16点建议
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiopshared memory(共享内存) Android通过下面几个方式在不同的Process中来共享RAM: 每一个app的proc ...
- 正确认识Android的内存管理机制,合理关闭进程 (一)
随着大家收货后会有很多乐粉晒内存,为啦方便大家,在网上搜集了一些相关Andriod管理的相关机制合理管理内存,整理下发个贴. 首先要知道Android系统是基于Linux 2.6内核开发的开源操作系统 ...
- 学习android内核 -- 内存管理相关
Android内存管理: 1.当应用程序关闭以后,后台对应的进程并没有真正的退出(处于休眠状态,一般不占用系统CPU的资源),这是为了下次再启动的时候能快速启动. 2.当系统内存不够时,AmS会主动根 ...
- 安卓Android的内存管理原理解析
Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况 ...
- Android 图片内存优化与图片压缩
1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFactory.decodeResource 来设置一张大图,因为这些方法在完成 ...
- Android Dalvikvm 内存管理理解
网上非常多文件介绍了 jvm 内存管理的理论,但在 Dalvikvm 中,到底是怎样实现的. 这几天猛看了 Dalvikvm 的源码,说一下我的理解: 在大层面上讲跟理论一样,jvm 把内存分成了一些 ...
- 80.Android之内存管理
转载:http://www.jianshu.com/p/9fb0a795da93 1. Android中的内存 1.1 Android中的垃圾回收机制 Android 平台最吸引开发者的一个特性:有垃 ...
随机推荐
- Linux中文乱码 - - 更改Linux字符集
查看当前系统默认采用的字符集: # locale 在RedHat/CentOS系统下,记录系统默认使用语言的文件是/etc/sysconfig/i18n,如果默认安装的是中文的系统,i18n的内容如 ...
- day53 鼠标事件 键盘事件 及JQuery
复习 // 语法: ECMAScript 操作: DOM BOM // 1.类型转化 // 转数字: +"3.14" | parseInt("123abc") ...
- canel的网络策略
资源: https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/flannel 基于pod Egress ...
- 2018-2019-2 20175218 实验一《Java开发环境的熟悉》实验报告
实验内容.步骤与体会: 1.实验过程的理解,实验指导书中知识点的理解. (1)知道了JVM.JRE.JDK之间的区别. JVM就是我们熟知的Java虚拟机:JRE是Java运行环境:而JDK则是Jav ...
- js给页面添加回车监测事件,实现回车登录功能
document.body.addEventListener('keyup', function (e) { ') { $("#btn_login").click(); } }) ...
- Vue-input框checkbox强制刷新
在引用input框的checkbox属性时,选中后会出现数据已经刷新,checkbox选中状态不会改变.这时在事件触发后可以调用this.$forceUpdate(),强制刷新页面解决这个问题. in ...
- Ubuntu ROS
设置你的sources.list 将电脑设置为接受来自packages.ros.org的软件 sudo sh -c 'echo "deb http://packages.ros.org/ro ...
- nio实现原理
nio是事件驱动,当soket有消息过来时才开启线程,bio每当有连接时,就开启一个线程,长连接的话,就有太多的空闲连接占用线程内存 nio是非阻塞长连接 ServerSocketChannel:饭店 ...
- session cookie简介
会话机制:Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身 ...
- 使用Snappy将html或者url转成PDF文件
这是一个操作简单的html文件或者url转PDF的php库 Github地址 https://github.com/KnpLabs/snappy 安装: $ composer require knpl ...