在Android开发中,有哪些好的android 内存优化化方式

在Android开发中,优化,是一直困扰开发者的一个难题,为什么这么说呢,一是为了项目的运行效果考虑,一个是为了让你的项目在别人眼里高端大气上档次,哈哈,开个玩笑,更重要的是能更好优化项目的一些性能,减少冗余,现就将这些大家在开发中经常遇到的需要优化的技术点整合出来,这样就不用被你的项目经理骂喽,呵呵,先一睹为快吧!
Android 开发相关
在Android项目开发中,有时候可能我们将要求的功能实现了,但是,你的代码…在Android开发过程中,相信很多开发者都会遇到有关Android adb的问题,可能…或许困扰很多Android开发者最大的问题莫过于Bug的修改了,调Bug 改Bug,想…想学习Android编程应该有一年时间了...一直没有真的去做,应该就在几天前吧…在Android开发中,有些小的项目和应用堪称经典,无法超越,他们简单的设计…对于Android的UI控件相信大家都不会陌生,通常我们大都会用到哪个会到网上…ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架。轻量到只有一…Android App发生内存泄漏,常见的有Bitmap 使用后]有recycle(),Drawable …
您觉得哪类优化对您的帮助最大?
Android UI方面
Android 数据库方面
Android 代码方面
Android 内存方面
Android 列表方面
Android 图片方面
在Android开发中,优化,是一直困扰开发者的一个难题,为什么这么说呢,一是为...
CocoStudio工具集是基于开源跨平台游戏引擎Cocos2d-x的开发工具集,包括UI编辑...
最近Google Play 4.0的大改版、Google Glass UI――Timeline Card的公开,都让...
...象:走高端路线。从硬件到软件,从华丽的外观到复古的UI,似乎都秉承了这样...Android 中对于图片的内存优化方法
字体:[ ] 类型:转载 时间:
Android 中对于图片的内存优化方法,需要的朋友可以参考一下
1. 对图片本身进行操作
尽量不要使用 setImageBitmap、setImageResource、 BitmapFactory.decodeResource 来设置一张大图,因为这些方法在完成 decode 后,最终都是通过 Java 层的 createBitmap 来完成的,需要消耗更多内存。因此,改用先通过 BitmapFactory.decodeStream 方法,创建出一个 bitmap,再将其设为 ImageView 的 source,decodeStream 最大的秘密在于其直接调用 JNI&&nativeDecodeAsset() 来完成 decode,无需再使用 Java 层的 createBitmap,从而节省了 Java 层的空间。如果在读取时加上图片的 Config 参数,可以更有效的减少加载的内存,从而更有效阻止抛出内存异常。另外,decodeStream 直接拿图片来读取字节码了,不会根据机器的各种分辨率来自动适应,使用了 decodeStream 之后,需要在 hdpi 和 mdpi,ldpi 中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。
代码如下:InputStream is = this.getResources().openRawResource(R.drawable.pic);BitmapFactory.Options options = new BitmapFactory.Options();options.inJustDecodeBounds =options.inSampleSize = 2;Bitmap btp =BitmapFactory.decodeStream(is,null,options);以上代码即是读取 drawable 下名为 pic 图片的缩略图,长度、宽度都只有原图片的 1/2。图片大小减少,占用的内存自然也变小了。这么做的弊端是图片质量变差,inSampleSize 的值越大,图片的质量就越差。由于各手机厂商缩放图片的算法不同,在不同手机上的缩放图片质量可能会不同。
2. 调用图片的 recycle() 方法
代码如下:if(!bmp.isRecycle() ){&& bmp.recycle()&&& //回收图片所占的内存&& system.gc()&&&&& //提醒系统及时回收}这种方法其实不是真正降低图片内存的方法。主要目的是标记图片对象,方便回收图片对象的本地数据。图片对象的本地数据占用的内存最大,而且与程序 Java 部分的内存是分开计算的。所以经常出现 Java heap 足够使用,而图片发生 OutOfMemoryError 的情况。在图片不使用时调用该方法,可以有效降低图片本地数据的峰值,从而减少 OutOfMemoryError 的概率。不过调用了 recycle() 的图片对象处于“废弃”状态,调用时会造成程序错误。所以在无法保证该图片对象绝对不会被再次调用的情况下,不建议使用该方法。特别要注意已经用 setImageBitmap(Bitmap img) 方法分配给控件的图片对象,可能会被系统类库调用,造成程序错误。
3. 以最省内存的方式读取本地资源的图片
代码如下:/**&* 以最省内存的方式读取本地资源的图片&*/public static Bitmap readBitMap(Context context, int resId){& && BitmapFactory.Options opt = new BitmapFactory.Options();& && opt.inPreferredConfig = Bitmap.Config.RGB_565;& && opt.inPurgeable =& && opt.inInputShareable =& && // 获取资源图片& && InputStream is = context.getResources().openRawResource(resId);& && return BitmapFactory.decodeStream(is,null,opt);& }
Android 中加载图片的颜色模式有四种,分别是:ALPHA_8:每个像素占用 1byte 内存、ARGB_4444:每个像素占用 2byte 内存、ARGB_8888:每个像素占用 4byte 内存、RGB_565:每个像素占用 2byte 内存。Android默认的颜色模式为ARGB_8888,这个颜色模式色彩最细腻,显示质量最高。但同样的,占用的内存也最大。以上代码即是将图片资源以 RGB_565 (或以 ARGB_4444)模式读出。内存减少虽然不如第一种方法明显,但是对于大多数图片,看不出与 ARGB_8888 模式有什么差别。不过在读取有渐变效果的图片时,可能有颜色条出现。另外,会影响图片的特效处理。
4. 使用 Matrix 对象放大的图片如何更改颜色模式:
虽然使用 Matrix 对象放大图片,必定会耗费更多的内存,但有时候也不得不这样做。放大后的图片使用的 ARGB_8888 颜色模式,就算原图片是ARGB_4444 颜色模式也一样,而且没有办法在放大时直接指定颜色模式。可以采用以下办法更改图片颜色模式。
代码如下:Matrix matrix = new Matrix();float newWidth = 200;&&&&&& // 图片放大后的宽度float newHeight = 300;&&&&& // 图片放大后的长度matrix.postScale(newWidth / img.getWidth(), newHeight/ img.getHeight());Bitmap img1 = Bitmap.createBitmap(img, 0, 0, img.getWidth(), img.getHeight(), matrix, true);// 得到放大图片img2 = img1.copy(Bitmap.Config.ARGB_4444, false);&&&&&&&&&&&&&&&&&&&&&&&&&& // 得到 ARGB_4444 颜色模式的图片img =img1 =
这里比起本来的图片额外生成了一个图片对象 img1。然则体系会主动收受接管 img1,所以实际内存还是削减了。
归结起来还是以缩略图模式读取图片和削减图片中每个像素占用的内存最为有效。 这两种办法固然有效,然则也有各自的弊病。实际开辟中还是应当按照景象酌情应用。最王道的办法,还是避免垃圾对象的产生。例如在 ListView 的应用中,复用 convertView 等。若是应用 AsyncTask 加载图片,要及时将引用的 ImageView 对象置为 null。因为 AsyncTask 是用线程池实现的,所以此中引用的对象可能会拥有很长的生命周期,造成 GC 无法开释。我还是信赖 Android 的内存收受接管机制的,recycle 什么的固然必然程度上有效,但总感觉不合适 Java 内存收受接管的原则。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Android应用开发中内存管理优化方法的研究--《武汉理工大学》2014年硕士论文
Android应用开发中内存管理优化方法的研究
【摘要】:随着Google Play中应用数量的飞速增长,Android用户可选择的应用越来越多,对应用的要求也越来越高,不再只是满足基本功能,还要美观、流畅、稳定等。
本文以一个需要大量使用图片的Android应用——RUI手机桌面为研究对象。根据其特点和开发过程中出现的OOM问题,提出了一种优化内存管理解决方案,既保证应用程序的美观、流畅、稳定,又能够大量使用图片,不出现内存溢出的异常。本文完成如下工作:
1)分析产生OOM问题的原因,并针对不同的情况提出不同的解决方案。
2)分析影响缓存大小的因素,根据这些因素怎么合理设置缓存的大小。
3)实现从已安装的应用、本地res目录、网络、Sqlite数据库中加载图片,并对图片做缩放和圆角化处理。
4)实现异步刷新视图的任务,即从非主线程中获取图片资源,在主线程中对视图进行进行刷新。
5)实现LRU缓存替换策略,并在此基础上提出改进,实现双缓存替换策略,比较使用不同的策略对应用程序加载效率的影响。
本文提出了使用缓存策略来解决OOM的问题,并且实现了自定义的异步刷新视图的任务,保证了应用的稳定和流畅。最终的测试结果表明,使用缓存策略时,图片的平均加载时间缩短到原来的1/5,有效提高了应用的加载效率。
【关键词】:
【学位授予单位】:武汉理工大学【学位级别】:硕士【学位授予年份】:2014【分类号】:TP311.5【目录】:
摘要4-5Abstract5-6目录6-8第1章 绪论8-11 1.1 课题研究背景8-9 1.2 课题研究目的及意义9-10 1.3 论文的组织安排10-11第2章 Android 虚拟机解析11-24 2.1 虚拟机概述11-17
2.1.1 Java 虚拟机11-14
2.1.2 Android 虚拟机 Dalvik VM14-16
2.1.3 Dalvik 与 JVM 的差异16-17 2.2 内存分配策略17-20
2.2.1 Java 内存分配管理17-18
2.2.2 Davlik 虚拟机内存分配18-20 2.3 垃圾回收策略20-24
2.3.1 Java 虚拟机垃圾回收策略21-22
2.3.2 dalvik 虚拟机垃圾回收策略22-24第3章 内存管理优化方法的研究24-38 3.1 产生 OOM 的原因24-28
3.1.1 数据库查询未关闭24
3.1.2 Context 引用问题24
3.1.3 构造 Adapter 未使用缓存24-25
3.1.4 创建过多的 Bitmap25-28 3.2 解决 OOM 的方法28-34
3.2.1 规范编码28-30
3.2.2 缓存策略30-34 3.3 决定缓存大小的因素34-38
3.3.1 每个应用程序的最大内存34-35
3.3.2 缓存内容的大小35-36
3.3.3 视图显示大小36-38第4章 内存管理优化方法的实现38-71 4.1 总体设计38-40 4.2 缓存初始化模块40-43
4.2.1 获取终端设备属性的原因40-41
4.2.2 设备屏幕属性41-42
4.2.3 设备为每个应用分配的最大内存42-43 4.3 Bitmap 的获取模块43-51
4.3.1 Bitmap 的加载43-46
4.3.2 Bitmap 的处理46-51 4.4 异步刷新视图模块51-56
4.4.1 异步加载的原因51-52
4.4.2 系统异步任务 AsyncTask52-54
4.4.3 自定义异步任务54-56 4.5 缓存替换策略模块56-68
4.5.1 LRU 缓存替换策略的实现56-65
4.5.2 双缓存替换策略的实现65-68 4.6 实现结果与分析68-71
4.6.1 运行环境68
4.6.2 运行效果图68
4.6.3 测试操作68-69
4.6.4 测试结果69
4.6.5 结果分析69-71第5章 总结与展望71-73致谢73-74参考文献74-76
欢迎:、、)
支持CAJ、PDF文件格式
【参考文献】
中国期刊全文数据库
刘贺;;[J];电脑编程技巧与维护;2011年16期
尹文刚;杨斌;;[J];单片机与嵌入式系统应用;2012年06期
丁锐;张亚君;陈维;;[J];杭州电子科技大学学报;2011年05期
刘昌平;范明钰;王光卫;郑秀林;宫亚峰;;[J];计算机应用研究;2010年07期
赵世彧;张盛;王玉辉;白岩;;[J];煤炭技术;2011年04期
高兰兰;;[J];软件;2011年09期
权重民;彭昕昀;;[J];韶关学院学报;2011年12期
段琳;;[J];中国新技术新产品;2011年16期
中国博士学位论文全文数据库
邹琼;[D];中国科学技术大学;2008年
【共引文献】
中国期刊全文数据库
龚成莹;邢敬宏;胡银保;;[J];工业仪表与自动化装置;2013年01期
陈捷;何志坚;宋占伟;;[J];吉林大学学报(信息科学版);2013年02期
关晶鑫;李永全;;[J];电脑知识与技术;2013年11期
梁胜彬;凌广明;;[J];计算机光盘软件与应用;2013年14期
欧阳小星;;[J];单片机与嵌入式系统应用;2013年08期
周山;;[J];硅谷;2013年15期
杨涛;李隐峰;胡秋玲;;[J];电子科技;2013年12期
李巍;庄恩贵;王建;张兵兵;戴冶;任洪琴;;[J];中国管理信息化;2014年06期
王淞;;[J];计算机光盘软件与应用;2014年01期
伍敏君;;[J];计算机光盘软件与应用;2014年01期
中国博士学位论文全文数据库
尹国伟;[D];中国农业科学院;2014年
中国硕士学位论文全文数据库
柏栋栋;[D];西北大学;2011年
张广;[D];杭州电子科技大学;2011年
苏晓波;[D];华中科技大学;2010年
刘泽衡;[D];哈尔滨工业大学;2011年
王彦超;[D];大连理工大学;2011年
程展传;[D];华南理工大学;2011年
浦欣;[D];复旦大学;2011年
许瀛;[D];吉林大学;2012年
杨锴;[D];北京林业大学;2012年
乔一乘;[D];吉林大学;2012年
【二级参考文献】
中国期刊全文数据库
付博;牛建伟;胡建平;;[J];计算机科学;2008年07期
张鹏;;[J];通信世界;2010年03期
贾晓霞;吴际;金茂忠;李郭欢;;[J];计算机应用研究;2006年09期
孔凡良;;[J];科技广场;2009年09期
李芙蓉;;[J];甘肃科技纵横;2008年05期
林立;邹昌伟;;[J];软件导刊;2010年11期
苏志毅;乔秀全;李晓峰;;[J];软件;2010年10期
王铮;李志军;;[J];计算机技术与发展;2007年03期
姚昱旻;刘卫国;;[J];计算机系统应用;2008年11期
姚昱旻;刘卫国;;[J];计算机系统应用;2008年12期
中国博士学位论文全文数据库
郇丹丹;[D];中国科学院研究生院(计算技术研究所);2006年
中国硕士学位论文全文数据库
孙晓宇;[D];北京邮电大学;2009年
【相似文献】
中国期刊全文数据库
陈琛;;[J];通信世界;2010年03期
陈琛;;[J];通信世界;2010年03期
李健;;[J];电子产品世界;2010年03期
单玉良;;[J];程序员;2010年03期
张雪超;;[J];互联网天地;2010年02期
;[J];电脑爱好者;2010年10期
;[J];电脑爱好者;2010年11期
蔡罗成;;[J];信息安全与通信保密;2010年06期
一笑;;[J];电视技术;2010年04期
;[J];电脑与电信;2010年06期
中国重要会议论文全文数据库
万晓燕;徐国庆;;[A];2011年全国电子信息技术与应用学术会议论文集[C];2011年
鲍轩;章坚武;;[A];浙江省信号处理学会2012学术年会论文集[C];2012年
Di JWang JZhang L;[A];2012年计算机应用与系统建模国际会议论文集[C];2012年
Xin Li;Yumei ZXiong Li;;[A];2013年中国智能自动化学术会议论文集(第二分册)[C];2013年
符易阳;周丹平;;[A];第26次全国计算机安全学术交流会论文集[C];2011年
金洁;张琳;;[A];2010年通信理论与信号处理学术年会论文集[C];2010年
张立;韩银和;袁小龙;;[A];第十四届全国容错计算学术会议(CFTC'2011)论文集[C];2011年
Cheng CLi LJianguo CCheng Z;[A];Proceedings of 2011 International Conference on Computer Science and Information Technology(ICCSIT 2011)[C];2011年
Zhe CPei-Luen Patrick RDennis SOsama KPoom LCherry Yu;Nam W;[A];第八届和谐人机环境联合学术会议(HHME2012)论文集CHCI[C];2012年
魏宁;王金海;;[A];天津市生物医学工程学会第三十四届学术年会论文集[C];2014年
中国重要报纸全文数据库
;[N];计算机世界;2009年
连晓东;[N];中国电子报;2010年
本报实习记者
朱怡兵;[N];通信信息报;2010年
林剑;[N];通信信息报;2009年
尼尔·卡利斯特;[N];中国计算机报;2009年
;[N];电脑报;2011年
项有建 《冲出数字化》作者;[N];通信产业报;2011年
曾航;[N];21世纪经济报道;2012年
赵玲玲;[N];中华合作时报;2013年
通信产业报(网)互联网主编
王彦彬;[N];通信产业报;2013年
中国博士学位论文全文数据库
杨欢;[D];西安电子科技大学;2014年
尹国伟;[D];中国农业科学院;2014年
曾述可;[D];中国科学技术大学;2014年
中国硕士学位论文全文数据库
秦凯;[D];华南理工大学;2012年
陈捷;[D];吉林大学;2013年
王剑龙;[D];吉林大学;2013年
李钰;[D];天津大学;2012年
黄鑫;[D];厦门大学;2014年
祝忠方;[D];北方工业大学;2014年
江耸;[D];中山大学;2013年
党李成;[D];安徽大学;2010年
侯效;[D];北京邮电大学;2011年
胡锐;[D];华南理工大学;2011年
&快捷付款方式
&订购知网充值卡
400-819-9993
《中国学术期刊(光盘版)》电子杂志社有限公司
同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 大众知识服务
出版物经营许可证 新出发京批字第直0595号
订购热线:400-819-82499
服务热线:010--
在线咨询:
传真:010-
京公网安备75号在Android开发中,有哪些好的内存优化方式?如何避免 Out Of Memory(OOM) ?(_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
在Android开发中,有哪些好的内存优化方式?如何避免 Out Of Memory(OOM) ?(
上传于|0|0|暂无简介
你可能喜欢

我要回帖

更多关于 系统内存优化级别 的文章

 

随机推荐