1. ホーム
  2. android

[解決済み] エラー : BinderProxy@45d459c0 is not valid; activity is running?

2022-04-25 08:42:09

質問

このエラーは何ですか...私はstackoverflowコミュニティでこのエラーに関する議論を見つけたことがない 詳細:-)

10-18 23:53:11.613: ERROR/AndroidRuntime(3197): Uncaught handler: thread main exiting due to uncaught exception
10-18 23:53:11.658: ERROR/AndroidRuntime(3197): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@45d459c0 is not valid; is your activity running?
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.view.ViewRoot.setView(ViewRoot.java:468)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.app.Dialog.show(Dialog.java:239)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at com.vishal.contacte.Locationlistener$MyLocationListener.onLocationChanged(Locationlistener.java:86)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.location.LocationManager$ListenerTransport._handleMessage(LocationManager.java:179)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.location.LocationManager$ListenerTransport.access$000(LocationManager.java:112)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.location.LocationManager$ListenerTransport$1.handleMessage(LocationManager.java:128)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.os.Handler.dispatchMessage(Handler.java:99)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.os.Looper.loop(Looper.java:123)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at android.app.ActivityThread.main(ActivityThread.java:4363)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at java.lang.reflect.Method.invokeNative(Native Method)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at java.lang.reflect.Method.invoke(Method.java:521)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:862)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
10-18 23:53:11.658: ERROR/AndroidRuntime(3197):     at dalvik.system.NativeStart.main(Native Method)

解決方法は?

背景スレッドの実行後、アクティビティが破棄されるまでの間にダイアログを表示しようとしていることが原因である可能性が高いです。

ダイアログを呼び出すアクティビティが何らかの理由で終了したときに、ダイアログを表示しようとすると、私のいくつかのアプリからこのエラーが報告されるのを時々見ていました。 以下は、それを解決したものです。

if(!((Activity) context).isFinishing())
{
    //show dialog
}

私は数年前から古いバージョンのAndroidでこの問題を回避するためにこれを使用しており、それ以来クラッシュを見たことがありません。

2021年版アップデート

いくつかのコメントで、やみくもにキャストするのは良くないと指摘されています。 ContextActivity . 同感です!

最近、似たようなコードを書くときに Fragment (オリジナルの回答が提供されてから8年以上経過していますが)私はもっとこうしています。

if (!requireActivity().isFinishing) {
     // show dialog
}

主なポイントは、ホスティングの後にダイアログを表示したり、UIを更新しようとすることです。 Activity がkillされた場合、クラッシュが発生します。Activityがkillされたときにバックグラウンドのスレッドをkillするなど、できる限りの対策を行うか、最低限ここでの回答を参考に、アプリがクラッシュしないようにしましょう。