【发布时间】:2021-04-05 22:51:31
【问题描述】:
我在开发控制台中收到很多包含此错误消息的崩溃报告:
java.lang.IllegalArgumentException:
at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed (RequestManagerRetriever.java:317)
at com.bumptech.glide.manager.RequestManagerRetriever.get (RequestManagerRetriever.java:128)
at com.bumptech.glide.manager.RequestManagerRetriever.get (RequestManagerRetriever.java:108)
at com.bumptech.glide.Glide.with (Glide.java:776)
at com.mypackagename.censored.GlobalBanner$7.run (GlobalBanner.java:241)
at android.os.Handler.handleCallback (Handler.java:888)
at android.os.Handler.dispatchMessage (Handler.java:100)
at android.os.Looper.loop (Looper.java:213)
at android.app.ActivityThread.main (ActivityThread.java:8178)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:513)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1101)
GlobalBanner.java:241 是:
ImageView imageView = dialog.findViewById(R.id.dialog);
RequestOptions options = new RequestOptions()
.placeholder(R.drawable.globaldialog_placeholder)
.error(R.drawable.globaldialog_failedtoload);
Glide.with(mContext).load(imageURLGlobal).apply(options).into(imageView ); //This is Line 241
该代码适用于我的所有设备和模拟器,它加载 540 x 722 JPG 并将其作为对话框显示在应用程序中。图片大小为 182 KB。
我真的没有更多信息,该错误发生在许多不同的 Android 版本和设备上。
谁能告诉我如何解决这个问题?
编辑 这是在 MainActivity 的 onCreate 中在 App 启动时调用的完整函数:
public static void setGlobalBanner(final Context mContext) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (isDislayingGlobal == 1) {
final Dialog dialog = new Dialog(mContext);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setContentView(R.layout.dialog_global_banner);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
dialog.getWindow().setDimAmount(0.5f);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
dialog.getWindow().setAttributes(lp);
ImageView dialogButton1 = dialog.findViewById(R.id.button_close);
dialogButton1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
dialog.dismiss();
}
});
ImageView imageView = dialog.findViewById(R.id.dialogImage);
RequestOptions options = new RequestOptions()
.placeholder(R.drawable.globaldialog_placeholder)
.error(R.drawable.globaldialog_failedtoload);
Glide.with(mContext).load(imageURLGlobal).apply(options).into(imageView);
imageView .setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(playstorelinkGlobal)));
dialog.dismiss();
}
});
dialog.show();
}
}
}, displayingSecondsGlobal);
}
displaysecondsGlobal 正在从我的数据库中提取,是对话框在显示之前应该等待的秒数,主要是 120 秒。 是否有可能因为 MainActivity 是 onPause 而崩溃?是因为其他 Activity 还是因为 Interstitial 或 RewardedVideo 广告?
它只在一小部分用户设备上崩溃,而且用户不需要显示对话框,它只是我用来宣传我自己的应用程序的一个对话框。 是否可以在 Glide 语句周围包装一个简单的 try 和 catch 块,使其被捕获并且不会崩溃?
【问题讨论】:
-
您可以在调用此请求时发帖吗?
assertNotDestroyed暗示RequestManagerRetriever可能为空,可能被另一个/UI 线程销毁? -
@snachmsm 我发布了整个函数,它在 MainActivity onCreate 中被调用,但处理程序等待 120 秒直到它执行 Glide 代码,也许它在用户打开另一个活动或观看奖励视频时崩溃广告?因为 MainActivity 的 onPause 被调用了?
标签: android debugging crash android-glide illegalargumentexception