学而实习之 不亦乐乎

Android 开发中出现 java.lang.OutOfMemoryError 的错误

2023-07-10 15:12:44

APP 开发过程中,使用 Glide 加载图片时发生了 OOM 的错误,如下:

java.lang.OutOfMemoryError: Failed to allocate a 157904368 byte allocation with 4194304 free bytes and 101MB until OOM

一、问题

java.lang.OutOfMemoryError: Failed to allocate a allocation until OOM 这个内存溢出错误是在 Android APP 运行的时候出现的,这可能是因为 RAM 中缓存太多文件或反复实例化相同的位图和视频造成的内存不足。

二、解决办法

1) 在​AndroidManifest.xml ​添加如下,增大安卓虚拟机内存

  1. android:hardwareAccelerated="true" 使用内存来加快图片的加载速度。
  2. android:largeHeap="false" 会限制app应用申请的内存大小。

所以,这里将 hardwareAccelerated 设置为false,largeHeap 设置为 true。

<application
    android:allowBackup="true"
    android:icon="@mipmap/guruji"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:hardwareAccelerated="false"
    android:largeHeap="true"
    android:theme="@style/AppTheme">

2)禁止 Glide 内存缓存并使用磁盘缓存

代码如下:

public static final RequestOptions requestOptions = new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL).skipMemoryCache(true);

然后使用asDrawable代替asBitmap,drawable更省内存。