【问题标题】:using cardview on top of recycler view crashes system在回收站视图上使用 cardview 会导致系统崩溃
【发布时间】:2019-10-13 06:23:36
【问题描述】:

为什么使用cardview使用大图会导致android系统崩溃?我使用 1280 X 600 图像进行卡片视图,但在安装后启动应用程序崩溃,系统会从 logcat 中显示 out of memory error

我在启动应用程序时至少有 400MB 的 RAM(使用简单的系统监视器查看),但是应用程序崩溃了。卡片视图是否设计为仅适用于小图像?如果我们必须为更大 dpi 的设备使用更大的图像怎么办? cardview 与回收器视图一起使用,并且测试它的操作系统是 KitKat。

【问题讨论】:

    标签: android android-recyclerview android-cardview


    【解决方案1】:

    您可能有 400 MB RAM,但所有 RAM 都不会直接提供给您的应用程序,因此应用程序会崩溃...如果您想为不同的设备使用不同的 dpi 图像,那么您可以将其添加到 drawable、drawable-mdpi , drawable-xhdpi,drawable-xxhdpi 等文件夹,以便系统可以自动选择它们....如果您从 url 加载...那么您可以使用 Picasso、Glide 等第三方库来有效地加载图像

    另外,在您的问题中,您是说要在回收站视图中添加卡片视图...这意味着将加载多个 1280x600 图像,这将占用大量内存并使您的应用崩溃。

    对于您的问题“卡片视图是否设计用于仅处理小图像?” 不,cardview 与您的内存不足无关...它为您提供的图像大小和内存...card view 可以处理任何大小的图像。

    添加 android:largeHeap="true" 到你的清单可以在一定程度上帮助你

    【讨论】:

    • 如果与大 dpi 设备一起使用的大图像崩溃了怎么办?
    • 对于特定的 dpi 设备,它们将能够在一定程度上显示大尺寸的图像……您只需进行一些尝试并找到不会崩溃的图像大小。 ..并相应地实现图像..我建议使用不同大小和类型的图像测试您的应用程序,以便您了解它是如何工作的..您不需要非常大的图像来显示清晰的图像.. ..非常小的图像将显示所有必需的细节,而用户不会注意到差异
    【解决方案2】:

    我遇到了同样的问题。将 android:largeHeap="true" 添加到 AndroidManifest.xml 中的标记解决了我在物理 Android 上的问题,但我有点担心这对于某些内存较少的设备可能仍然是一个问题?!?

    您没有提到要如何显示图像是卡片背景还是图像视图到卡片视图中。如果你想在 CardView 中使用 ImageView,那么你可以使用 picasso 或 glide 库来处理这个问题。

    当您为处理多个图像集或大型位图或某些动画内容的应用程序进行开发时,内存不足错误是非常常见的错误。在这种情况下,我们在处理图像或对象分配和释放时必须非常小心和高效。当分配超过堆限制或您的进程需要超过堆限制的内存量时,就会出现 OOM 错误。

    【讨论】:

    • 我想显示字幕图像,是的,使用图像视图,感谢毕加索和滑翔技巧,我会试试的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2020-08-10
    相关资源
    最近更新 更多