我的应用被OOM杀死,但未调用onTrimMemory方法
我使用Fresco进行图像缓存,因为在4.4设备上有很多图像,我的应用被OOM杀死了。我尝试从显示图像的活动和Application类中重写诸如onTrimMemory()的方法,在这些方法中我尝试清除缓存以避免OOM,但我的应用仍然崩溃。 之后,我尝试在此方法中设置日志,但我注意到,即使我的应用崩溃了,该方法也不会被调用
没有太多要显示的代码:
override fun onTrimMemory(level: Int) {
Timber.d("GalleryActivity onTrimMemory %s", level)
if (level == ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW) {
Fresco.getImagePipeline().clearCaches()
}
}
我做错了还是我的理解不对?当应用程序占用过多内存时,不应该调用这些方法吗?
有什么办法可以解决这个问题?谢谢
更新,这是日志的样子:
at android.graphics.Bitmap.createBitmap(Bitmap.java:913) 在android.graphics.drawable.VectorDrawable $ VectorDrawableState.createCachedBitmapIfNeeded(VectorDrawable.java:834) 在android.graphics.drawable.VectorDrawable.draw(VectorDrawable.java:318) 在android.graphics.drawable.LayerDrawable.draw(LayerDrawable.java:916) 在com.facebook.drawee.drawable.ForwardingDrawable.draw(ForwardingDrawable.java:185) 在com.facebook.drawee.drawable.ScaleTypeDrawable.draw(ScaleTypeDrawable.java:123) 在com.facebook.drawee.drawable.FadeDrawable.drawDrawableWithAlpha(FadeDrawable.java:302) 在com.facebook.drawee.drawable.FadeDrawable.draw(FadeDrawable.java:289) 在com.facebook.drawee.drawable.ForwardingDrawable.draw(ForwardingDrawable.java:185) 在com.facebook.drawee.generic.RootDrawable.draw(RootDrawable.java:81)
答案 0 :(得分:0)
出于这些目的,我建议为应用添加单独的服务,并尝试使用onLowMemory,onTrimMemory。
另一方面,使用Fresco导致OOM崩溃很奇怪。作为解决方案之一,evictFromMemoryCache可以在具有上述API级别的设备上使用,只要它不会违反您的要求。