web-dev-qa-db-ja.com

致命的な例外:Android.view.WindowManager $ BadTokenExceptionウィンドウを追加できません-トークンが無効です。あなたの活動は実行されていますか?

私はこの質問が何度か議論されていることを知っていますが、私は何の答えも得られなかったと信じています。メインアクティビティで、いくつかのダイアログを使用していくつかの操作についてユーザーに通知しましたが、Xiaomiデバイスでこの特定のエラーのほとんど(特に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();

`しかし、それでもリリースモードでこのエラーが発生しますXiaomiデバイスAndroidバージョン7、過去1か月間この問題が発生するのを手伝ってください。

これがfirebase Crashlyticsのデータです

デバイス100%Xiaomiオペレーティングシステム100%Android 7デバイスの状態4%バックグラウンド

7
Santosh Patange

この問題はDialogが原因ではなく、Toastが原因です。主にこのトーストの問題はAndroid 7.1バージョンで、コンテキストがnullになります。この紳士によって作成されたソリューションがあります Solution 。私はテストしましたが、これは非常にうまく機能していますこれを試すことができます。

 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();
            }
12