加载较大的本地文件作为背景图时 防止内存溢出

发布时间:2017-6-29 9:54:17编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"加载较大的本地文件作为背景图时 防止内存溢出",主要涉及到加载较大的本地文件作为背景图时 防止内存溢出方面的内容,对于加载较大的本地文件作为背景图时 防止内存溢出感兴趣的同学可以参考一下。

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。 

因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。
如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常
另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应, 使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。 

	/**
	* 以最省内存的方式读取本地资源的图片
	* @param context
	* @param resId
	* @return
	*/
	public static Bitmap readBitMap(Context context, int resId) {
		BitmapFactory.Options opt = new BitmapFactory.Options();
		opt.inPreferredConfig = Bitmap.Config.RGB_565;
		opt.inPurgeable = true;
		opt.inInputShareable = true;
		//获取资源图片  
		InputStream is = context.getResources().openRawResource(resId);
		return BitmapFactory.decodeStream(is, null, opt);
	}


https://tinypng.com  图片处理网址

参考:http://263229365.iteye.com/blog/1562924



上一篇:nginx:TIME_WAIT过多或者CLOSE_WAIT过多的状态
下一篇:AxonFramework,存储库

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款