10

我知道这个问题已经讨论过好几次了,但相信我,我从来没有得到任何有效的答案。在我的主要活动中,我使用了一些对话框来通知用户一些操作,但我在小米设备上大多(特别是 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% 背景

4

2 回答 2

21

这个问题不是因为 Dialog 而是因为 Toast。主要是这个 Toast 问题在上下文变为空的 android 7.1 版本中。这位先生解决方案创建了一个解决方案。我已经测试过了,效果很好。你可以试试这个。

 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();
            }
于 2018-09-21T06:31:46.897 回答
-3

使用 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;
  }
 }
};
于 2018-07-26T06:58:21.133 回答