【问题标题】:OutOfMemoryException issue using Picasso使用毕加索的 OutOfMemoryException 问题
【发布时间】:2015-09-21 10:26:47
【问题描述】:

我们的应用程序的图像资源很重。目前,我们没有根据服务器的设备分辨率发送图像的规定。从服务器发送的图像通常具有高分辨率(大约 900 X 900)。我有几个疑问: 1) 下载并存储在文件磁盘缓存中的图像是否会与服务器中的原始大小相同。

2) 一旦图像保存在文件磁盘缓存中,如何处理图像以将其放入内存缓存中。存储在内存缓存中的位图图像是否会根据设备分辨率转换为较低的分辨率?

3) 如果目标图像的高度和宽度未知,那么我们如何根据设备分辨率缩小位图图像?根据我们的要求,不可能为 imageview 提供固定的宽度和高度。有 resize(int, int) 方法,但问题是,在某些情况下我们无法更改图像的高度和宽度。理想情况下,应该有一些解决方案将图像尺寸缩小 %(比如说 20%)。

崩溃并不总是发生,因为它取决于内存。

【问题讨论】:

  • 这不是毕加索的问题,您一定是在做大量消耗内存的工作,因此您会收到此问题。根据我的经验。这是最好的库。我用过,因为其中一个应用程序充满了来自服务器的图像。所以请检查您的代码库中是否存在任何内存泄漏

标签: android picasso


【解决方案1】:

您可以使用 android:largeHeap="true" 请求更大的堆大小,但这不适用于任何预 Honeycomb 设备。在 2.3 之前的设备上,您可以使用 VMRuntime 类,但这不适用于 Gingerbread 及更高版本。

获得尽可能大的限制的唯一方法是通过 NDK 执行内存密集型任务,因为 NDK 不像 SDK 那样施加内存限制。

或者,您可以仅加载当前视图中的模型部分,并根据需要加载其余部分,同时从内存中删除未使用的部分。但是,这可能是不可能的,具体取决于您的应用。

Example:
<application android:largeHeap="true" ....</application>

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多