java - OutOfMemoryException - 使用 Glide 的最佳方式

标签 java android performance memory-management heap-memory

我正在使用 glide 从互联网加载数百张图像。所有这些都在 RecyclerView 中。我的代码工作正常。但是当我在滚动时超过一定数量的图像时,Android 会抛出 outOfMemoryException -

UncaughtException: java.lang.OutOfMemoryError: Failed to allocate a 8754216 byte allocation with 6257104 free bytes and 5MB until OOM
                                                                              at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
                                                                              at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
                                                                              at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:620)
                                                                              at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:455)
                                                                              at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1155)
                                                                              at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:720)
                                                                              at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:571)
                                                                              at android.content.res.Resources.loadDrawable(Resources.java:858)
                                                                              at android.content.res.TypedArray.getDrawable(TypedArray.java:928)
                                                                              at android.widget.ImageView.<init>(ImageView.java:162)
                                                                              at android.widget.ImageView.<init>(ImageView.java:150)
                                                                              at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:60)
                                                                              at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:56)
                                                                              at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106)
                                                                              at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1017)
                                                                              at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1076)
                                                                              at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
                                                                              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:769)
                                                                              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:858)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.parseInclude(LayoutInflater.java:994)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:854)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.rInflate(LayoutInflater.java:861)
                                                                              at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
                                                                              at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
                                                                              at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:143)
                                                                              at com.devsvalley.pacobookings.HallDetailActivity.onCreate(HallDetailActivity.java:116)
                                                                              at android.app.Activity.performCreate(Activity.java:6679)
                                                                              at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                              at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                                              at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                              at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                              at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                              at android.os.Looper.loop(Looper.java:154)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:6119)

01-11 19:37:02.860 3261-3261/com.devsvalley.pacobookings E/UncaughtException:位于 java.lang.reflect.Method.invoke( native 方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

最佳答案

在 list 中使用这些行:

android:largeHeap="true" 
android:hardwareAccelerated="false"

关于java - OutOfMemoryException - 使用 Glide 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41593563/

相关文章:

android - Windows 8 上的 Firefox 远程调试 "unexpected error"

c# - 您更喜欢 'materializing' IEnumerables?

c# - 创建大列表<T>

apache - Apache 后面的 Tomcat 下载 Servlet 导致 httpd 高 CPU

android - 没有哈希键条件适用于指定的索引

java - 使用 PrivilegedMode=TRUE 的 AWS 精选 Docker 镜像创建 CodeBuild 项目

Java api 到 exiftool

java - 我们应该总是释放 Java 中的 Map 或 List 吗?

java - 既然我们已经有了用于创建移动应用程序的 J2ME 和 WML,为什么还要选择 Android?

java - 具有相同接口(interface)的两个 EJB。这是一个好习惯吗?