致命exception:android.view.WindowManager $ BadTokenException无法添加窗口 – 令牌无效; 你的活动在运行吗?

我知道这个问题已经讨论了几次,但相信我,我从来没有得到任何答案。 在我的主要活动中,我使用了少量的Dialog来通知用户一些操作,但我在小米设备上主要(特别是96%)得到了这个特定的错误。 `

Fatal Exception: android.view.WindowManager$BadTokenException Unable to add window -- token android.os.BinderProxy@f839de9 is not valid; is your activity running? android.view.ViewRootImpl.setView (ViewRootImpl.java:697) android.view.WindowManagerGlobal.addView (WindowManagerGlobal.java:347) android.view.WindowManagerImpl.addView (WindowManagerImpl.java:94) android.widget.Toast$TN.handleShow (Toast.java:463) android.widget.Toast$TN$2.handleMessage (Toast.java:346) android.os.Handler.dispatchMessage (Handler.java:102) android.os.Looper.loop (Looper.java:163) android.app.ActivityThread.main (ActivityThread.java:6377) java.lang.reflect.Method.invoke (Method.java) com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:904) 

com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794) I covered each Dialog Show method like

 if (!MainActivityNew.this.isFinishing()) dialogDownload.show(); 

`但是我仍然在发布模式下出现这个错误主要是在使用Android版本7的小米设备上,请帮助我在过去的一个月里坚持这个问题。

以下是来自Firebase Crashlytics的一些数据

设备100%小米操作系统100%Android 7设备状态4%背景

这个问题不是因为Dialog而是Toast。 主要是这个Toast问题是在android 7.1版本中,其中上下文变为null。 这个绅士解决方案创造了一个解决方案 。 我已经测试过,这种方法非常有效。 你可以试试这个。

  if (android.os.Build.VERSION.SDK_INT == 25) { ToastCompat.makeText(context, message, Toast.LENGTH_SHORT) .setBadTokenListener(toast -> { Log.e("failed toast", message); }).show(); } else { Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } 

使用Asynctask或Handler,如:

 Use private Handler mHandler = new Handler() { @Override public void handleMessage(Message message) { switch (message.what) { case DISPLAY_DLG: if (!isFinishing()) { dialogDownload.show(); } break; } } };