通用图像加载器:内存不足错误

2024-03-25

我正在使用universal-image-loader-1.6.2.jar(最新的)。 我正在尝试使用此库下载并缓存该图像。我有 47 张图像要从服务器下载,总共 5.22 Mb。我的最大图像尺寸为 720X480,大小约为 143kb。一切顺利,直到 40-41 张图像之后出现错误

11-02 16:30:12.150: E/ImageLoader(31033): null
11-02 16:30:12.150: E/ImageLoader(31033): java.lang.OutOfMemoryError
11-02 16:30:12.150: E/ImageLoader(31033):   at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
11-02 16:30:12.150: E/ImageLoader(31033):   at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
11-02 16:30:12.150: E/ImageLoader(31033):   at com.nostra13.universalimageloader.core.ImageDecoder.decode(ImageDecoder.java:83)
11-02 16:30:12.150: E/ImageLoader(31033):   at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.saveImageOnDisc(LoadAndDisplayImageTask.java:218)
11-02 16:30:12.150: E/ImageLoader(31033):   at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:138)
11-02 16:30:12.150: E/ImageLoader(31033):   at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:72)
11-02 16:30:12.150: E/ImageLoader(31033):   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:442)
11-02 16:30:12.150: E/ImageLoader(31033):   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-02 16:30:12.150: E/ImageLoader(31033):   at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-02 16:30:12.150: E/ImageLoader(31033):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-02 16:30:12.150: E/ImageLoader(31033):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-02 16:30:12.150: E/ImageLoader(31033):   at java.lang.Thread.run(Thread.java:856)
11-02 16:30:47.170: E/Adreno200-ES20(31033): <qgl2DrvAPI_glUseProgram:1318>: **** 31033: glUseProgram(3)
11-02 16:30:47.170: E/Adreno200-ES20(31033): <qgl2DrvAPI_glUseProgram:1318>: **** 31033: glUseProgram(6)

我在 git-hub 上看到并实施了有关 OOM 的建议。我跟着他们仍然出现错误。 这是我的代码

if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
        cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"neongall");
    else
        cacheDir=context.getCacheDir();
    if(!cacheDir.exists())
        cacheDir.mkdirs();

    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
    .threadPoolSize(3)
    .threadPriority(Thread.NORM_PRIORITY - 1)
    .memoryCache(new WeakMemoryCache())
    .denyCacheImageMultipleSizesInMemory()
    .offOutOfMemoryHandling()
    .discCacheExtraOptions(720, 480, CompressFormat.JPEG, 75)
    .discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
    .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
    .imageDownloader(new URLConnectionImageDownloader(120 * 1000, 120 * 1000)) // connectTimeout (5 s), readTimeout (20 s)
    .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
    .enableLogging()
    .build();
    //Initialize ImageLoader with created configuration. Do it once on Application start.
    imageLoader.init(config);


    options = new DisplayImageOptions.Builder()
    .cacheOnDisc()
    .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
    .displayer(new RoundedBitmapDisplayer(10))
    .build();

提前致谢。


首先你的配置:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPoolSize(3) // equal to default value
.threadPriority(Thread.NORM_PRIORITY - 1) // equal to default value
.memoryCache(new WeakMemoryCache())
.denyCacheImageMultipleSizesInMemory()
.offOutOfMemoryHandling()
.discCacheExtraOptions(720, 480, CompressFormat.JPEG, 75)
.discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
.discCacheFileNameGenerator(new HashCodeFileNameGenerator()) // equal to default value
.imageDownloader(new URLConnectionImageDownloader(120 * 1000, 120 * 1000)) // connectTimeout (5 s), readTimeout (20 s)
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // equal to default value
.enableLogging()
.build();

等于

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCache(new WeakMemoryCache())
.denyCacheImageMultipleSizesInMemory()
.offOutOfMemoryHandling()
.discCacheExtraOptions(720, 480, CompressFormat.JPEG, 75)
.discCache(new UnlimitedDiscCache(cacheDir))
.imageDownloader(new URLConnectionImageDownloader(120 * 1000, 120 * 1000))
.enableLogging()
.build();

不要复制自述文件中的配置!

为什么要关闭 OutOfMemory 处理?如果你这样做,那么你应该自己处理 OOM 错误ImageLoadingListener.onLoadingFailed(FailReason.OUT_OF_MEMORY).

我给你的建议:

  • delete .offOutOfMemoryHandling()配置中的选项
  • delete .discCacheExtraOptions(720, 480, CompressFormat.JPEG, 75)配置中的选项
  • use .imageScaleType(ImageScaleType.IN_SAMPLE_INT)在显示选项中
  • 你真的需要 RoundedBitmapDisplayer 吗?请参阅文档,它在舍入期间在内存中创建额外的位图。如果可以的话避免使用它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通用图像加载器:内存不足错误 的相关文章

  • Erlang 中的 Apple 推送通知(或 Ruby 中的改进?)

    目前 我的服务器上有一个使用 Ruby 运行的 Apple 推送通知 我想在 Erlang 中使用一个 因为我想使用一个主管来监视它 有人有任何代码可以帮助我吗 这是我的 Ruby 代码 我不喜欢当前实现的一件事是它似乎无法保持连接 它每天
  • 什么会导致 Valgrind 堆栈跟踪中出现奇怪的地址?

    这个问题与从 valgrind 输出中过滤掉垃圾 https stackoverflow com questions 34325305 filtering out junk from valgrind output 我正在尝试调试一个大型项
  • ResolveUrl 和 ResolveClientUrl 有什么区别?

    我一直在使用 ResolveUrl 在 ASP NET 文件中添加 CSS 和 Javascript 但我通常会看到 ResolveClientUrl 的选项 两者有什么区别 我什么时候应该使用 ResolveClientUrl Resol
  • C++无法打开源文件

    在使用 Visual Studio 2017 的 C 中 我将一些头文件复制到我的项目文件夹中 然后将它们添加到 c 中的 解决方案资源管理器 下 现在当我写的时候 include name h 它在包含下打印一个错误 并显示 无法打开源文

随机推荐

  • 嵌套类构造函数的可见性

    C 中有没有办法限制嵌套类的实例化 我想防止嵌套类从除嵌套类之外的任何其他类实例化 但允许从其他代码完全访问嵌套类 通常 我会为要向其他类公开的功能创建一个接口 然后将嵌套类设为私有并实现该接口 这样嵌套类定义可以保持隐藏 public c
  • Java 使用 Java 8 时间库将 UTC 转换为 PDT/PST

    我想使用内置的 Java 8 时间库将 UTC 转换为 PST PDT 我正在编写一个与 API 对话的程序 该 API 根据时间范围返回对象列表 例如 从某个日期时间创建 修改的对象 我的程序使用LocalDateTime并且该值始终采用
  • 将 docker 与 RDS (Prod) 一起使用,但对本地数据库设置感到困惑 (dev)

    我正在使用 Docker 设计一个 Rails web 应用程序 出于多种原因 我想在生产环境中使用 RDS 来实现其可配置性和耐用性 而不是基于 Docker 容器的数据库 这是一个要求 我意识到我可以配置数据库 yml指向 Prod 环
  • 如何通过Prefix获取所有data-*属性

    我有一个这样的标签 a href Link a 当我点击这个链接时 我有一个这样的功能 ssd click function event var customData Code to get all the custom data in f
  • 什么会导致 php 的 strtotime 对 2099 年的日期不起作用?

    我有三台服务器 在所有三台服务器上执行以下操作 echo strtotime 2099 12 31 echo strtotime date Y m d gets me 服务器 1 php 5 3 8 64位 4102376400 13284
  • Swift:将视图从堆栈视图带到前面

    我得到了一个堆栈视图 其中包含以下视图 1 2 3 4 和 5 寻找一种方法将 Image View4 从 Stack 视图中的 view4 移至所有其他视图之上 我需要这个的原因是因为我将 Image View4 移动到 view3 中的
  • 如何在拖动过程中修复 jQuery UI 对话框的大小?

    这是一个简单的对话框 如下代码所示 每当拖动对话框时 其高度就会减小 当我设置对话框的 ressized false 时 它 的高度值甚至会改变 最后我通过在 DragStop 事件处理程序中重新更新对话框高度来修复它 我发现有人报告了类似
  • 如何确定当前 Mono 运行时的构建和安装版本?

    我想确定当前 Mono 运行时的构建和安装版本 如何在 Git 中正确调用它 dmcs version Mono C compiler version 2 9 0 0 但这绝对是不够的 XSP ASP NET 错误页面提供了更多信息 版本信
  • PIP 安装 Numpy 抛出错误“ascii 编解码器无法解码字节 0xe2”

    我在一台新构建的计算机上新安装了 Ubuntu 我刚刚使用 apt get 安装了 python pip 现在 当我尝试 pip install Numpy 和 Pandas 时 出现以下错误 我在 SO 和 Google 上的很多地方都看
  • 如何导入其他 TypeScript 文件?

    使用 vs net 的 TypeScript 插件时 如何使一个 TypeScript 文件导入其他 TypeScript 文件中声明的模块 file 1 module moo export class foo file 2 what go
  • create-react-app --template typescript — 是否可以暂时禁用类型检查?

    我正在使用 TypeScript 开发一个 create react app 它会在我的前端文件夹中自动生成一个 tsconfig include src 每次运行应用程序时 即使我删除或更改文件 有没有办法禁用 TS cra 中的类型检查
  • 如何在 C# 中检查一个日期时间是否大于另一个

    我有两个DateTime对象 StartDate and EndDate 我想确定一下StartDate是在之前EndDate 这在 C 中是如何完成的 if StartDate lt EndDate code 如果您只想要日期而不是时间
  • 继承、组合和默认方法

    人们通常承认 通过继承来扩展接口的实现并不是最佳实践 而组合 例如 从头开始再次实现接口 更易于维护 这是有效的 因为接口契约强制用户实现所有所需的功能 然而 在 java 8 中 默认方法提供了一些可以 手动 覆盖的默认行为 考虑下面的例
  • C# - 将“对象”参数转换为该对象的类型?

    C Hi all 我将一个对象传递给一个方法 我想将该对象转换为它的特定类 以便我可以执行它自己的特定方法 我怎样才能做到这一点 Move new Cat Move new Pigeon public void Move object ob
  • 当满足条件时如何退出迭代循环?

    我想迭代一个函数g with iterate 当我运行代码时 循环无限运行 当条件满足时是否有可能跳出循环 就像是if g x gt 100 then stop My code f x iterate g x g x 2 x 只要翻转条件
  • 代码契约:确保未经验证并需要未经验证

    我不确定我是否在这里做错了什么或者是否需要修复 我有一个自定义的 Dictionary 包装类 这是必要的代码片段 public int Count get Contract Ensures Contract Result
  • 最后一页底部流程正文中的最后一个块

    我怎样才能拥有最后的fo block in fo flow正文与最后一页的底部对齐吗 我并不是指每个页面上的页脚部分 没关系 但我希望流程主体中的最后一个块位于最后一页的底部 流体的内容多种多样 我不知道最后一个块部分的高度是多少 有可能以
  • 如何使表格中的文本向左溢出?

    我有一张固定布局的桌子 溢出时 单元格的内容应从左侧而不是右侧剪切 也就是说 如果 TD 的宽度小于文本的宽度 则下面的单元格应显示 67890 而不是 12345 这至少需要在 IE7 中运行 有没有办法在 css 中做到这一点而不需要任
  • Android 中的内存缓存 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试将一个视频存储在内存缓存中
  • 通用图像加载器:内存不足错误

    我正在使用universal image loader 1 6 2 jar 最新的 我正在尝试使用此库下载并缓存该图像 我有 47 张图像要从服务器下载 总共 5 22 Mb 我的最大图像尺寸为 720X480 大小约为 143kb 一切顺