【发布时间】:2018-09-19 04:49:28
【问题描述】:
我有一个带有一些背景的回收站视图的活动。
有时当滚动回收视图并按返回按钮时,我会收到此错误。
我有两种背景(一种是模糊的)。
要加载我使用的普通背景:
fun AppCompatImageView.loadImage(resId: Int) {
Glide.with(context)
.load(AppCompatResources.getDrawable(context, resId))
.into(this)
}
加载我使用的模糊背景:
Glide.with(mContext)
.applyDefaultRequestOptions(RequestOptions().override(backgroundWidth, backgroundHeight))
.asBitmap()
.load(R.drawable.card_dog_placeholder)
.into(object : SimpleTarget<Bitmap>() {
override fun onResourceReady(bitmap: Bitmap, transition: Transition<in Bitmap>?) {
cardYouAreHeroBackgroundImageView.setImageBitmap(bitmap.blurRenderScript(mContext, CARD_BG_RADIUS))
}
})
fun Bitmap.blurRenderScript(context: Context, radius: Float): Bitmap {
val rs = RenderScript.create(context)
val blurredBitmap = copy(Bitmap.Config.ARGB_8888, true)
val input = Allocation.createFromBitmap(rs, blurredBitmap, Allocation.MipmapControl.MIPMAP_FULL, Allocation.USAGE_SHARED)
val output = Allocation.createTyped(rs, input.type)
val script = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs))
script.setInput(input)
script.setRadius(radius)
script.forEach(output)
output.copyTo(blurredBitmap)
return blurredBitmap
}
java.lang.RuntimeException:无法销毁活动 {com.yourpackage/com.yourpackage.DashboardActivity}: java.lang.IllegalStateException:无法获得回收的大小 位图:android.graphics.Bitmap@a4f3bcf[896x157] ARGB_8888 at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4383) 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4401) 在 android.app.ActivityThread.-wrap5(未知来源:0) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 引起 作者:java.lang.IllegalStateException:无法获得回收的大小 位图:android.graphics.Bitmap@a4f3bcf[896x157] ARGB_8888 at com.bumptech.glide.util.Util.getBitmapByteSize(Util.java:78) 在 com.bumptech.glide.load.resource.bitmap.UnitBitmapDecoder$NonOwnedBitmapResource.getSize(UnitBitmapDecoder.java:49) 在 com.bumptech.glide.load.engine.EngineResource.getSize(EngineResource.java:60) 在 com.bumptech.glide.load.engine.cache.LruResourceCache.getSize(LruResourceCache.java:42) 在 com.bumptech.glide.load.engine.cache.LruResourceCache.getSize(LruResourceCache.java:13) 在 com.bumptech.glide.util.LruCache.put(LruCache.java:124) 在 com.bumptech.glide.load.engine.cache.LruResourceCache.put(LruResourceCache.java:13) 在 com.bumptech.glide.load.engine.Engine.onResourceReleased(Engine.java:326) 在 com.bumptech.glide.load.engine.EngineResource.release(EngineResource.java:112) 在 com.bumptech.glide.load.engine.Engine.release(Engine.java:286) 在 com.bumptech.glide.request.SingleRequest.releaseResource(SingleRequest.java:345) 在 com.bumptech.glide.request.SingleRequest.clear(SingleRequest.java:324) 在 com.bumptech.glide.manager.RequestTracker.clearRemoveAndMaybeRecycle(RequestTracker.java:73) 在 com.bumptech.glide.manager.RequestTracker.clearRemoveAndRecycle(RequestTracker.java:60) 在 com.bumptech.glide.RequestManager.untrack(RequestManager.java:623) 在 com.bumptech.glide.RequestManager.untrackOrDelegate(RequestManager.java:591) 在 com.bumptech.glide.RequestManager.clear(RequestManager.java:579) 在 com.bumptech.glide.RequestManager.onDestroy(RequestManager.java:323) 在 com.bumptech.glide.manager.ActivityFragmentLifecycle.onDestroy(ActivityFragmentLifecycle.java:65) 在 com.bumptech.glide.manager.SupportRequestManagerFragment.onDestroy(SupportRequestManagerFragment.java:194) 在 android.support.v4.app.Fragment.performDestroy(Fragment.java:2585) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1559) 在 android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1752) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1821) 在 android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3251) 在 android.support.v4.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:3242) 在 android.support.v4.app.FragmentController.dispatchDestroy(FragmentController.java:265) 在 android.support.v4.app.FragmentActivity.onDestroy(FragmentActivity.java:390) 在 android.support.v7.app.AppCompatActivity.onDestroy(AppCompatActivity.java:209) 在 android.app.Activity.performDestroy(Activity.java:7208) 在 android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1249) 在 android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4370) 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4401) 在 android.app.ActivityThread.-wrap5(未知来源:0) android.app.ActivityThread$H.handleMessage(ActivityThread.java:1649) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
有什么想法吗?
【问题讨论】:
-
我也有同样的问题。它似乎与位图回收有关。我用 Glide.get(this).getBitmapPool().put( bitmap ) 替换了 bitmap.recycle() 但它仍然会发生。你解决了吗?我用的是 Glide 4.6.1,你呢?
-
我的问题是相关的,因为我正在模糊视图,为了模糊我使用设置绘图缓存启用视图的视图。之后我禁用缓存并崩溃。所以解决方案是使用其他方法将视图获取为位图。
-
嗨,@AndroidRuntimeException。你还记得你是如何解决这个问题的吗?
标签: android kotlin android-glide