重新打开时的滑动问题+无法从被破坏的活动中加载

时间:2017-09-25 05:42:26

标签: java android android-fragments android-lifecycle android-glide

我一直在使用适配器中的Glide,我将上下文从Activity类传递到我的片段(View在片段中)。当用户在关闭后尝试重新启动时,我检查了大约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();

2 个答案:

答案 0 :(得分:0)

每当你试图加载一个图像时,我猜这个活动都会处于被破坏的状态。当你尝试加载图像并在加载之前移动到不同的活动时会发生这种情况。所以进行空检查以查看是否存在活动和还存在图像参考。

还用itemHolder.friendImageView.getContext()替换itemHolder.ImageView.getContext()。

检查此编辑的代码以加载图像

new Error("Date is null or empty.")

答案 1 :(得分:0)

使用Glide加载图像时始终使用Activity context

在将Glide与adapters一起使用时,您可以使用RequestManageradapter的构造函数中从活动本身传递Glide.with(this)个对象。

在开始滑行加载之前,检查activity/fragment是否可见始终是安全的。

所以对于Activity:

if(!this.isFinishing()){
   // Initialise Glide here
}

For Fragment:

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