繁体   English   中英

应用程序被杀死但onTrimMemory没有被调用

[英]App gets killed but onTrimMemory does not get called

我的应用因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()
    }
}

我做错了什么还是我的理解不正确? 当应用占用过多内存时,是否不应该调用这些方法?

有什么办法解决这个问题? 谢谢

更新,这是日志的样子:

在android.graphics.Bitmap.createBitmap(Bitmap.java:913)在android.graphics.drawable.VectorDrawable $ VectorDrawableState.createCachedBitmapIfNeeded(VectorDrawable.java:834)在android.graphics.drawable.VectorDrawable.draw(VectorDrawable.java:318) ),位于com.facebook.drawee.drawable.ForwardingDrawable.draw(ForwardingDrawable.java:185)的com.facebook.drawee.drawable.ScaleTypeDrawable.draw(android.graphics.drawable.LayerDrawable.draw(LayerDrawable.java:916) com.facebook.drawee.drawable.FadeDrawable.drawDrawableWithAlpha(FadeDrawable.java:302)的com.facebook.drawee.drawable.FadeDrawable.draw(FadeDrawable.java:289)的ScaleTypeDrawable.java:123) com.facebook.drawee.generic.RootDrawable.draw(RootDrawable.java:81)上的.drawable.ForwardingDrawable.draw(ForwardingDrawable.java:185)

我建议出于这些目的将单独的Service添加到应用中,并尝试使用onLowMemoryonTrimMemory

另一方面,使用Fresco导致OOM崩溃很奇怪。 作为解决方案之一,如果不违反您的要求,可以在具有上述API级别的设备上使用evictFromMemoryCache

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM