重新开放时出现滑动问题+无法从已销毁的活动中加载
我一直在使用适配器中的Glide,其中我将Activity上下文从Activity类传递给了我的片段(视图在片段中)。当用户在关闭后尝试重新启动时,我检查了大约30台设备和3-5台设备中的应用程序崩溃。可能是什么原因以及如何处理这个异常? 我不想在Glide中使用Applicationcontext,因为这将保持滑翔资源。有没有其他解决方法?重新开放时出现滑动问题+无法从已销毁的活动中加载
logcat的
java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed(RequestManagerRetriever.java:134)
at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:102)
at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:87)
at com.bumptech.glide.Glide.with(Glide.java:629)
at com.trial.project.Adapter.LiveUserListAdapterInside.onBindViewHolder(LiveUserListAdapterInside.java:68)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6389)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5335)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5598)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
at android.support.v7.widget.RecyclerView.consumePendingUpdateOperations(RecyclerView.java:1618)
下面的代码滑翔装载
Glide.with(itemHolder.ImageView.getContext()).load(current.getPhotoUrl()).bitmapTransform(new CropCircleTransformation(context))
.placeholder(R.drawable.x2)
.into(itemHolder.friendImageView);
下面代码OnBackPressed()
// ... ...
... ..
finishAffinity();
每当你要加载的图像我猜活动WIL处于被破坏状态。当您尝试加载图像并移动到不同的活动时,会发生这种情况然后进行空检查,看看是否仍有活动存在,并且图像引用存在。
还用itemHolder.friendImageView.getContext()替换itemHolder.ImageView.getContext()。
检查加载图像
if(!this.isDestroyed() && friendImageView!=null && current.getPhotoUrl()!=null){
Glide.with(itemHolder.friendImageView.getContext())
.load(current.getPhotoUrl())
.bitmapTransform(new CropCircleTransformation(context))
.placeholder(R.drawable.x2)
.into(itemHolder.friendImageView);
}
我不清楚这个'itemHolder.ImageView.getContext()与itemHolder.ImageView.getContext()'。将检查为空虽然 – user232803
对不起,它是friendImageView.The上下文创建nullPointerexception.Either或使用getApplicationContext()或 – Anonymous
此外,如果!this.isDestroying()不工作!this.isFinishing()应该解决您的问题 – Anonymous
这个编辑的代码使用滑翔始终使用Activity context
同时加载图像。
,同时使用滑翔与adapters
你可以从活动本身的构造函数使用Glide.with(this)
合格adapter
RequestManager
对象。
在启动Glide载入之前,检查activity/fragment
是否可见始终安全。
因此,对于活动时间:
if(!this.isFinishing()){
// Initialise Glide here
}
对于片段:
MyFragmentClass mFragment = (MyFragmentClass) getSupportFragmentManager().findFragmentByTag("testID");
if (mFragment != null && mFragment.isVisible()) {
// Initialise Glide here
}
编号:https://android.jlelse.eu/using-glide-few-tips-to-be-a-pro-60f41e29d30a
添加logcat的请。 –
发布你正在得到的错误 – Anonymous
不幸的是,我没有这些设备的具体logcat,我们不能在我们的官方测试设备中重新创建错误,但它是类似于下面所述和出现在Glide.load行中的错误... java.lang.IllegalArgumentException:您无法为被销毁的活动启动加载 – user232803