Android 使用Glide从URL加载图像时出现IllegalArgumentException?

Android 使用Glide从URL加载图像时出现IllegalArgumentException?,android,debugging,crash,android-glide,illegalargumentexception,Android,Debugging,Crash,Android Glide,Illegalargumentexception,我在我的开发控制台中收到很多崩溃报告,其中包含以下错误消息: java.lang.IllegalArgumentException: at com.bumptech.glide.manager.RequestManagerRetriever.assertNotDestroyed (RequestManagerRetriever.java:317) at com.bumptech.glide.manager.RequestManagerRetriever.get (RequestMana

我在我的开发控制台中收到很多崩溃报告,其中包含以下错误消息:

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版本和设备上

有人能给我解释一下我该怎么解决这个问题吗

编辑 以下是在onCreate MainActivity的应用程序启动时调用的完整函数:

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处于暂停状态而崩溃?因为另一个活动,或者可能是插播或回赠视频广告

它只在一小部分用户设备上崩溃,而且用户也不需要显示对话框,它只是我用来宣传自己应用程序的对话框。
是否可以在Glide语句中封装一个简单的try-and-catch-blocka,这样它就可以被捕获而不会崩溃?

您正在UI线程中创建一个新的处理程序,该处理程序等待120秒,并且永远不会被解除。您的代码在
活动
被销毁并导致
Toast
finish
调用
null
上下文
(死
活动


在类顶部声明您的
Handler
,并始终调用
Handler.removeCallbacksAndMessages(null)
上下文
(或
线程
)被销毁时,例如对于
活动
它将是
onDestroy
方法,在
超级
调用

调用此请求时,您能否发布
AssertNotDistromed
表明
RequestManagerRetriever
可能为空,可能被另一个/UI线程破坏?@snachmsm我发布了整个函数,它在创建时在Main活动中被调用,但处理程序等待120秒,直到超过Glide代码,当用户打开另一个活动或观看奖励视频广告时,可能会崩溃?因为调用了MainActivity的onPause?所以在顶部声明处理程序应该可以解决这个问题?公共经办人;正在放置handler.removeCallbacksAndMessages(null);在onDestroy中,修复此崩溃或只是一个好的做法很重要?这两者都很重要,当不再需要时,您应该始终清除发布到
处理程序的消息,否则您可能会出现一些内存泄漏,在这种情况下,您可能会出现内存泄漏。即使
活动
被销毁
处理程序
仍然存在于内存中,并且在某个时刻试图执行一些与
活动
相关的代码(该代码已消失)