Android 开发中出现 java.lang.OutOfMemoryError 的错误
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 添加如下,增大安卓虚拟机内存
- android:hardwareAccelerated="true" 使用内存来加快图片的加载速度。
- 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更省内存。