我在我的应用程序中使用 glide 库来显示位图(来自 Assets 和 url)。 它运作良好,但由于我在每个 Activity 中显示大量图像,所以我遇到了一些内存问题。 我看到我可以使用 BitmapPool 中的 clearMemory(),但我不知道如何调用它..
有人知道怎么调用它吗?
谢谢
最佳答案
您可以使用 clearMemory()
或 trimMemory()
清除 Glide 的内存缓存和位图池:
Glide.get(context).clearMemory()
// or:
Glide.get(context).trimMemory(ComponentCallbacks2.TRIM_MEMORY_MODERATE);
也就是说,您不需要做任何一个。要检查两件事:
- 您是否正在加载多张大图片?如果是这样,您需要确保它们被下采样,因此请考虑在您正在加载图像的 View 或使用 Glide 的
override()
上设置一个明确的大小。 API 根据您的要求。结合像fitCenter
这样的转换来这样做将有助于减少每张图像使用的内存。 - 您的应用程序中是否存在内存泄漏?尽管位图分配经常抛出实际的 OutOfMemoryException,但大多数时候根本原因是应用程序其他地方的内存泄漏。如果 #1 不能解决您的问题,请 try catch 堆转储并检查是否有泄漏。 Android 开发者页面有 a great tutorial如何做到这一点。
关于Android,将 BitmapPool 与 Glide 库一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27778500/