javiersantos / AppUpdater

A library that checks for your apps' updates on Google Play, GitHub, Amazon, F-Droid or your own server. API 9+ required.
Apache License 2.0
1.98k stars 412 forks source link

Had Happened this crash: Unable to add window -- token android.os.BinderProxy@c7b8ad3 is not valid; is your activity running? #152

Open PhonHai opened 5 years ago

PhonHai commented 5 years ago
1
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@c7b8ad3 is not valid; is your activity running?
2
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:791)
3
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
4
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
5
    at android.app.Dialog.show(Dialog.java:330)
6
    at com.github.javiersantos.appupdater.AppUpdater$1.onSuccess(AppUpdater.java:348)
7
    at com.github.javiersantos.appupdater.UtilsAsync$LatestAppVersion.onPostExecute(UtilsAsync.java:102)
8
    at com.github.javiersantos.appupdater.UtilsAsync$LatestAppVersion.onPostExecute(UtilsAsync.java:15)
9
    at android.os.AsyncTask.finish(AsyncTask.java:695)
10
    at android.os.AsyncTask.-wrap1(Unknown Source:0)
11
    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
12
    at android.os.Handler.dispatchMessage(Handler.java:106)
13
    at android.os.Looper.loop(Looper.java:171)
14
    at android.app.ActivityThread.main(ActivityThread.java:6635)
15
    at java.lang.reflect.Method.invoke(Native Method)
16
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
17
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

adviced:

change: com.github.javiersantos.appupdater.AppUpdater

...
348  alertDialog.show();
...

to

...
347        if(((Activity)context).isFinishing()) {
348             alertDialog.show();
349        }
...
enwokoma commented 5 years ago

You should not compare a boolean with another boolean, but use the boolean ! operator (or nothing) instead. Then, if this is an Activity, you should rather use


if (!YourActivity.this.isFinishing()) {
    alertDialog.show();
}