当前位置: 首页 > news >正文

做游戏网站用什么软件/东莞网络推广系统

做游戏网站用什么软件,东莞网络推广系统,wordpress菜单显示css字体,新媒体网站建设方案Android开发中如何解决加载大图片时内存溢出的问题 在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给大家。 尽量不要使用setImageBitmap或setImageReso…

Android开发中如何解决加载大图片时内存溢出的问题

在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给大家。

 

尽量不要使用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中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。

另外,以下方式也大有帮助:

  1. InputStream is = this.getResources().openRawResource(R.drawable.pic1); 
  2.      BitmapFactory.Options options=new BitmapFactory.Options(); 
  3.      options.inJustDecodeBounds = false
  4.      options.inSampleSize = 10;   //width,hight设为原来的十分一 
  5.      Bitmap btp =BitmapFactory.decodeStream(is,null,options); 
  6.   
  7. if(!bmp.isRecycle() ){ 
  8.          bmp.recycle()   //回收图片所占的内存 
  9.          system.gc()  //提醒系统及时回收 
  10.   

以下奉上一个方法:

  1. /** 
  2.  
  3. * 以最省内存的方式读取本地资源的图片 
  4.  
  5. * @param context 
  6.  
  7. * @param resId 
  8.  
  9. * @return 
  10.  
  11. */ 
  12.  
  13.  
  14.  
  15. public static Bitmap readBitMap(Context context, int resId){ 
  16.  
  17.  
  18.  
  19. BitmapFactory.Options opt = new BitmapFactory.Options(); 
  20.  
  21.  
  22.  
  23. opt.inPreferredConfig = Bitmap.Config.RGB_565; 
  24.  
  25.  
  26.  
  27. opt.inPurgeable = true
  28.  
  29.  
  30.  
  31. opt.inInputShareable = true
  32.  
  33.  
  34.  
  35. //获取资源图片 
  36.  
  37.  
  38.  
  39. InputStream is = context.getResources().openRawResource(resId); 
  40.  
  41.  
  42.  
  43. return BitmapFactory.decodeStream(is,null,opt); 
  44.  
  45.  
  46.  

  1. ================================================================================ 
  2. Android内存溢出的解决办法 
  3.  
  4. 转自:http://www.cppblog.com/iuranus/archive/2010/11/15/124394.html?opt=admin 
  5.  
  6. 昨天在模拟器上给gallery放入图片的时候,出现java.lang.OutOfMemoryError: bitmap size exceeds VM budget 异常,图像大小超过了RAM内存。 
  7.  
  8.       模拟器RAM比较小,只有8M内存,当我放入的大量的图片(每个100多K左右),就出现上面的原因。 
  9. 由于每张图片先前是压缩的情况,放入到Bitmap的时候,大小会变大,导致超出RAM内存,具体解决办法如下: 
  10.  
  11. ```java 
  12. //解决加载图片 内存溢出的问题 
  13.                     //Options 只保存图片尺寸大小,不保存图片到内存 
  14.                 BitmapFactory.Options opts = new BitmapFactory.Options(); 
  15.                 //缩放的比例,缩放是很难按准备的比例进行缩放的,其值表明缩放的倍数,SDK中建议其值是2的指数值,值越大会导致图片不清晰 
  16.                 opts.inSampleSize = 4
  17.                 Bitmap bmp = null
  18.                 bmp = BitmapFactory.decodeResource(getResources(), mImageIds[position],opts);                              
  19.  
  20.                 ...               
  21.  
  22.                //回收 
  23.                 bmp.recycle(); 
  24.  
  25.   

通过上面的方式解决了,但是这并不是最完美的解决方式。

通过一些了解,得知如下:

优化Dalvik虚拟机的堆内存分配

对于Android平台来说,其托管层使用的Dalvik JavaVM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法: private final static floatTARGET_HEAP_UTILIZATION = 0.75f; 在程序onCreate时就可以调用VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);即可。

Android堆内存也可自己定义大小

对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的dalvik.system.VMRuntime类来设置最小堆内存为例:

private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;

VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理

bitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError的优化方法


★android 中用bitmap 时很容易内存溢出,报如下错误:Java.lang.OutOfMemoryError : bitmap size exceeds VM budget

● 主要是加上这段:

  1. BitmapFactory.Options options = new BitmapFactory.Options(); 
  2.                 options.inSampleSize = 2
  3.   

● eg1:(通过Uri取图片)

  1. private ImageView preview; 
  2. BitmapFactory.Options options = new BitmapFactory.Options(); 
  3.                     options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一 
  4.                     Bitmap bitmap = BitmapFactory.decodeStream(cr 
  5.                             .openInputStream(uri), null, options); 
  6.                     preview.setImageBitmap(bitmap); 
  7.   

以上代码可以优化内存溢出,但它只是改变图片大小,并不能彻底解决内存溢出。
● eg2:(通过路径去图片)

  1. private ImageView preview; 
  2. private String fileName= "/sdcard/DCIM/Camera/2010-05-14 16.01.44.jpg"
  3. BitmapFactory.Options options = new BitmapFactory.Options(); 
  4.                 options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一 
  5.                         Bitmap b = BitmapFactory.decodeFile(fileName, options); 
  6.                         preview.setImageBitmap(b); 
  7.                         filePath.setText(fileName); 

转载于:https://www.cnblogs.com/wuwa/p/6191576.html

http://www.lbrq.cn/news/1297729.html

相关文章:

  • 湛江网站建设/网站优化工具
  • 婚庆网站模板/打开网站搜索
  • 求可以做问卷测试的网站/黄页88网站推广方案
  • 网站建设需要平台/百度西安
  • 常用网站图标/如何优化关键词
  • 江苏建科建设监理有限公司网站/网络营销的未来发展趋势论文
  • 三亚网站制/优化大师电脑版官网
  • 天津医疗行业网站建设/手机百度推广怎么打广告
  • jsp做的知名网站/百度推广登录平台客服
  • 张掖响应式建站平台/西安百度关键词包年
  • ecommercial+wordpress/杭州关键词推广优化方案
  • 南昌做网站电话/搜索引擎优化举例说明
  • 网站快速收录技术/恶意点击竞价是用的什么软件
  • 石家庄做网站建设的公司排名/重庆电子商务网站seo
  • 重庆seo网站策划/营销咨询师
  • 珲春网站建设/第三方网络营销平台有哪些
  • 网站开发协议/线下推广宣传方式有哪些
  • 做的最好的微电影网站有哪些/百度竞价点击神器奔奔
  • 公司招商型网站建设/平台seo什么意思
  • python做网站需要什么/公司推广咨询
  • 刚做淘客没有网站/网站推广的方法有哪些?
  • 绍兴h5建站/百度网页版链接地址
  • 钟祥网站建设/seo免费诊断电话
  • 做一般的公司门户网站投资额/东莞网站优化
  • 网上有做logo的网站吗/百度灰色关键词排名代做
  • 哪些行业做网站推广的多/谷歌账号注册入口官网
  • 犀牛云做网站怎么这么贵/app下载免费安装
  • 1小时赚5000元游戏/aso优化费用
  • 泰州网站建设服务好/开创集团与百度
  • 能下短视频网站做牙/百度竞价是seo还是sem
  • 移动端开发的package命名规范
  • 后缀树:字符串处理的利器
  • STM32 RTOS 开发基础:从任务管理到同步机制的全面解析
  • 铁路基础设施无人机巡检技术及管理平台
  • Python应用指南:使用PyKrige包实现ArcGIS的克里金插值法
  • Linux C 进程基本操作