Android 为什么滑翔投掷';非法辩论例外';活动何时重新启动?
我正在使用Glide在我的android应用程序中从互联网加载图像。当用户单击“注销”按钮时,我将通过清除所有共享首选项并使用以下代码重新启动应用程序来注销用户:Android 为什么滑翔投掷';非法辩论例外';活动何时重新启动?,android,android-activity,android-context,android-glide,Android,Android Activity,Android Context,Android Glide,我正在使用Glide在我的android应用程序中从互联网加载图像。当用户单击“注销”按钮时,我将通过清除所有共享首选项并使用以下代码重新启动应用程序来注销用户: Intent i = getActivity().getBaseContext().getPackageManager().getLaunchIntentForPackage( getActivity().getPackageName() ); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); s
Intent i = getActivity().getBaseContext().getPackageManager().getLaunchIntentForPackage( getActivity().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
getActivity().finish();
而且注销工作正常。但是,当用户再次登录时,我的应用程序崩溃
以下是日志详细信息:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.highavenue.android, PID: 21503
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.highavenue.android.adapter.ActivityTimelineAdapter.onBindViewHolder(ActivityTimelineAdapter.java:181)
at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6673)
at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6714)
at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5647)
at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5913)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5752)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5748)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2232)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1559)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1519)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:614)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3812)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3529)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4082)
代码:(我在哪里以及如何使用Glide)
上面的代码用于RecycleServiceAdapter类,其中context指片段的上下文
注意:当用户手动关闭应用程序并再次打开时,不会发生此异常。我相信这就足够了(添加了
Intent.FLAG\u ACTIVITY\u CLEAR\u TASK
):
但是,正如同一问题中所建议的,您可以尝试使用:
Glide.with(YourActivityName.this) // or `getApplicationContext()`
而不是获取上下文
。这可能会解决错误。试试这个
Glide.with(getApplicationContext()).load(...)
错误会告诉您问题:
java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
因此,在对“活动”调用了finish()
之后,将执行滑动加载调用
您需要防止在完成活动后调用Glide load方法
根据您当前的代码,您可以设置一个标志或其他内容,告诉适配器不要加载图像:
mAdapter.disableImageLoading(); // Set a flag that internally prevents the Glide load from happening
Intent i = getActivity().getBaseContext().getPackageManager().getLaunchIntentForPackage( getActivity().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
getActivity().finish();
这不是最好的解决方案,但考虑到我对您的代码知之甚少,这是我能想到的最好的解决方案
希望有帮助 您能提供更多的日志吗?或者它与maybe类似?因为您正在经历Glide崩溃,所以显示您实际使用Glide的代码是谨慎的。@Mohsen我已经添加了额外的日志信息。请检查一下。Thanks@dominicoder我已经添加了代码部分,请检查。谢谢如果我使用上面提到的代码u,当用户单击“上一步”时,它将导航到旧活动(我在其中放置了注销按钮)以及为什么我没有使用我的活动。这是因为我正在“回收器”视图上加载图像。因此,如果我使用Myactivity。这可能会导致内存泄漏。更新答案。请看一看。好的。我试试这个,然后告诉你
java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
mAdapter.disableImageLoading(); // Set a flag that internally prevents the Glide load from happening
Intent i = getActivity().getBaseContext().getPackageManager().getLaunchIntentForPackage( getActivity().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
getActivity().finish();