Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序被杀死,但未调用OnTimmery_Android_Out Of Memory_Fresco - Fatal编程技术网

Android 应用程序被杀死,但未调用OnTimmery

Android 应用程序被杀死,但未调用OnTimmery,android,out-of-memory,fresco,Android,Out Of Memory,Fresco,我的应用程序会被OOM杀死,但不会调用非即时方法 我使用Fresco进行图像缓存,因为我在4.4设备上有很多图像,我的应用程序被OOM杀死。我试图从显示图像的活动和我试图清除缓存以避免OOM的应用程序类中重写类似于ontrimmory()的方法,但我的应用程序仍然崩溃。 之后,我尝试在这个方法中设置日志,我注意到,即使我的应用程序崩溃,也不会调用这个方法 没有太多代码可显示: override fun onTrimMemory(level: Int) { Timber.d("Galler

我的应用程序会被OOM杀死,但不会调用非即时方法

我使用Fresco进行图像缓存,因为我在4.4设备上有很多图像,我的应用程序被OOM杀死。我试图从显示图像的活动和我试图清除缓存以避免OOM的应用程序类中重写类似于ontrimmory()的方法,但我的应用程序仍然崩溃。 之后,我尝试在这个方法中设置日志,我注意到,即使我的应用程序崩溃,也不会调用这个方法

没有太多代码可显示:

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.CreateCacheDBITMAPIFneed(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.drawablewithalpha(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)

我建议为这些目的在应用程序中添加单独的服务,并尝试使用


另一方面,奇怪的是,使用湿壁画会导致崩溃。作为一种解决方案,如果不违反您的要求,可以在具有上述API级别的设备上使用。

您能给我一些关于如何使用RejectFromMemoryCache的提示吗?假设我在recyclerView/viewpager中显示图像,该如何使用此方法?对于所有加载的图像,还是仅针对屏幕外的图像?ThxI将对所有加载的图像使用它。我使用与Glide相同的功能
skipMemoryCache
。启用后,recyclerview将仅显示当前可见视图的图像缩略图。先前显示的图片将被清除,并从磁盘缓存中再次加载。不客气。请确保您没有试图分配巨大的位图。您应该调查是否只有一个原因总是导致OOM。你有日志吗?这不是你的问题,但我注意到在你的代码中你调用了
cleanCaches()
。它不仅清理内存缓存和磁盘缓存,这在低RAM的情况下是没有意义的。相反,我建议您实现MemoryTrimmablerRegistry。请参阅Fresco上的“使用MemoryTrimmablerRegistry”将注册所有内存可修剪部分,如缓存和池,您的工作将是告诉MemoryTrimmablerRegistry调用。当设备内存不足时,修剪所有已注册的修剪。@defflt我添加了崩溃log@defhlt我试过你最后的建议,但没有任何改进,仍然崩溃