`
xiaoheichuangtianya
  • 浏览: 28771 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

android 优化显示图片有效避免oom

阅读更多
Android开发中消耗内存较多一般都是在图像上面
加载图像有三种途径
1.从网络加载
2.从文件读取
3.从资源文件加载
针对这三种情况我们一般使用BitmapFactory的:decodeStream,
decodeFile,decodeResource,这三个函数来获取到bitmap然后再调用ImageView的setImageBitmap函数进行展现。
我们的内存去哪里了(为什么被消耗了这么多):
       其实我们的内存就是去bitmap里了,BitmapFactory的每个decode函数都会生成一个bitmap对象,用于存放解码后的图像,然后返回该引用。如果图像数据较大就会造成bitmap对象申请的内存较多,如果图像过多就会造成内存不够用自然就会出现out of memory的现象。


public static Bitmap getFitSampleBitmap(String file_path, int width, int height) {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(file_path, options);
        options.inSampleSize = getFitInSampleSize(width, height, options);
        options.inJustDecodeBounds = false;
        return BitmapFactory.decodeFile(file_path, options);
    }
    public static int getFitInSampleSize(int reqWidth, int reqHeight, BitmapFactory.Options options) {
        int inSampleSize = 1;
        if (options.outWidth > reqWidth || options.outHeight > reqHeight) {
            int widthRatio = Math.round((float) options.outWidth / (float) reqWidth);
            int heightRatio = Math.round((float) options.outHeight / (float) reqHeight);
            inSampleSize = Math.min(widthRatio, heightRatio);


itmapFactory提供了BitmapFactory.Option,用于设置图像相关的参数,在调用decode的时候我们可以将其传入来对图像进行相关设置。这里我们主要介绍option里的两个成员:inJustDecodeBounds(Boolean类型) 和inSampleSize(int类型)。
       inJustDecodeBounds :如果设置为true则表示decode函数不会生成bitmap对象,仅是将图像相关的参数填充到option对象里,这样我们就可以在不生成bitmap而获取到图像的相关参数了。
       inSampleSize:表示对图像像素的缩放比例。假设值为2,表示decode后的图像的像素为原图像的1/2。在上面的代码里我们封装了个简单的getFitInSampleSize函数(将传入的option.outWidth和option.outHeight与控件的width和height对应相除再取其中较小的值)来获取一个适当的inSampleSize。
       在设置了option的inSampleSize后我们将inJustDecodeBounds设置为false再次调用decode函数时就能生成bitmap了
        }
        return inSampleSize;
    }
分享到:
评论

相关推荐

    Android加载网络图片与本地图片解决OOM问题

    这个开源项目提供了一个强大的图片加载、缓存框架,能够有效地防止OOM并优化图片显示。 Android-Universal-Image-Loader库的核心功能包括: 1. **异步加载**:在后台线程加载图片,避免UI线程阻塞,提高用户体验。...

    android图片墙lrucache oom

    通过上述方式,我们可以有效地解决Android图片墙的OOM问题,提高应用的性能和稳定性。同时,开发者还应该时刻关注应用的内存使用情况,及时释放不再使用的资源,防止内存泄漏,确保应用的健康运行。

    Android相册图片解决OOM问题

    综上所述,解决Android加载图片出现的OOM问题需要综合运用各种策略,包括优化图片加载、缓存管理、使用合适的图片库以及合理地管理生命周期。只有这样,才能在保证用户体验的同时,避免因图片处理引发的内存问题。

    android防止oom的图片加载例子

    针对这个问题,我们需要采取一些策略来优化图片加载,避免OOM的发生。下面将详细介绍如何在Android中防止OOM错误,并通过`BitmapTool`工具类的使用,提供一种解决方案。 1. **理解Android内存管理** - Android为每...

    Android 图片下载以及内存处理防止OOM内存溢出 源码

    本教程将详细探讨如何在Android中有效地进行图片下载和内存处理,以避免OOM的发生。 1. **图片下载**: - 使用高效的图片下载库:如Glide、Picasso或Fresco。这些库具有自动缓存机制,能够减少网络请求,提高用户...

    Android高级应用源码-加载本地图片,绝对不会出现OOM.zip

    这个压缩包中的"PhotosWallDemo"可能是一个演示应用,它展示了如何在图片墙场景下,高效地加载和显示大量本地图片,同时避免OOM。其中可能包含如何设置图片加载策略,如何利用缓存,以及如何根据设备屏幕大小和...

    android 图片下载 防止OOM

    在Android开发中,图片加载...综上所述,防止Android图片下载导致的OOM,需要从图片加载策略、内存管理、缓存策略和资源清理等多方面进行优化。合理利用现有的图片库和性能监控工具,可以大大提高应用的性能和稳定性。

    android Gallery 3d 图片浏览 oom

    总结来说,解决"android Gallery 3d 图片浏览 oom"问题的关键在于优化图片加载流程,合理使用内存和缓存策略,同时注意处理好读取SD卡图片的权限。通过自定义`CustomGallery`,我们可以打造出性能优异、用户体验良好...

    Android OOM错误的原因

    - 使用计算好的`inSampleSize`再次加载图片,这样就可以得到一个尺寸适中的Bitmap对象,从而避免OOM错误的发生。 #### 五、总结 在Android开发中,理解和掌握OOM错误的产生原因是十分重要的。通过对内存管理机制的...

    android gridview 加载大量图片。无OOM

    综上所述,通过合理地使用图片缩略、延迟加载、缓存策略以及高效的图片加载库,我们可以有效地在Android GridView中加载大量图片,同时避免出现OOM问题。在实际开发中,应结合项目需求和性能测试,灵活运用这些策略...

    android解决OOM

    在Android开发中,"OOM"(Out of Memory)是一个常见的问题,它指的是应用程序在...以上就是解决Android OOM的一些关键知识点,通过合理运用这些策略,开发者可以有效地减少和预防OOM问题,提升应用的性能和稳定性。

    android之Gif处理(解决GIF显示容易OOM问题,包括代码和说明),非常详细的介绍

    本篇文章将深入探讨如何在Android中有效地处理GIF,以避免OOM问题。 一、GIF的内存占用问题 GIF是一种基于帧的图像格式,每一帧都是一个完整的图像。当在Android中加载GIF时,如果不做特殊处理,所有帧都会被加载到...

    android 永远不会oom的瀑布流

    瀑布流通常用于电商应用、图片分享平台等,它需要加载和显示众多图片,如果处理不当,很容易导致Out of Memory (OOM)错误。本篇文章将深入探讨如何构建一个“永远不会OOM”的瀑布流,并分析其中的关键技术点。 首先...

    引导页优化 防止oom

    通过为不同密度设备提供适配的图片资源,避免一次性加载过多图片,以及利用组件如ViewPager进行智能加载,可以有效地防止因引导页引发的OOM问题,从而提升用户体验。在实际开发过程中,还应持续监控和测试应用的内存...

    处理android bitmap oom

    以下是一些处理Android Bitmap以避免OOM的策略: 1. **适当尺寸的Bitmap**:首先,确保只加载应用程序实际需要的图像尺寸。通过使用`BitmapFactory.Options`的`inSampleSize`参数,可以缩小图像的大小。例如,如果...

    Android中使用Gridview和ViewPager显示图片的优化处理

    本篇文章将详细探讨如何在Android应用中使用`GridView`和`ViewPager`来优化图片显示,避免内存溢出。 首先,我们需要理解为什么在Android上显示大量图片会引发OOM。当一个应用占用的内存超过系统分配的最大值时,就...

    Android解决图片OOM问题

    例如,Glide默认使用LRUCache,并且能够自动调整图片大小,避免OOM。Picasso提供了简单的API来加载、缩放和转换图片,Fresco则使用了更复杂的内存和磁盘缓存机制。 **5. 使用WebP格式** WebP是一种高效、压缩率高的...

    android图片缓存优化,内存缓存加sdcard缓存,性能很好,防止oom

    在Android应用开发中,图片加载和管理是性能优化的关键领域,因为不当的处理方式往往会导致内存溢出(OOM)问题,影响用户体验甚至导致应用崩溃。本文将深入探讨Android图片缓存的优化策略,包括内存缓存和SDCard...

    Android例子源码仿oom的三例瀑布流源码

    在Android开发中,内存管理是至关重要的,...通过研究这三个示例,开发者可以学习到如何在实际项目中避免OOM,优化内存使用,并实现流畅的瀑布流布局。同时,这些例子也涵盖了Android开发中的最佳实践和性能调优技巧。

    图片oom,解决方法

    - **使用ImageView的ScaleType**:选择合适的缩放类型,如CENTER_CROP、FIT_CENTER等,可以有效控制图片在View中的显示大小,避免不必要的内存消耗。 - **使用第三方库**:如 Glide、Picasso、Fresco 等,它们具有...

Global site tag (gtag.js) - Google Analytics