• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            大龍的博客

            常用鏈接

            統計

            最新評論

            Android: annoying exception Unable to add window – is your activity running? --- 轉

            After publishing one of our apps on Google Play market I started receiving strange exception on Play Console:

            android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@40b47bd8 is not valid; is your activity running?
            at android.view.ViewRoot.setView(ViewRoot.java:452)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:283)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193)
            at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118)
            at android.view.Window$LocalWindowManager.addView(Window.java:532)
            at android.app.Dialog.show(Dialog.java:269)
            ...

            This exception occurred while app was trying to notify user from the background thread by opening a Dialog.

            I could not reproduce it myself: I tried every device I had and every type of emulator I could think of, but no luck, the app worked just fine. However, according to Google Play console, exception occurred very often and seemed very consistent.

            After doing some research I found out that it is possible for my app to try notifying the user while being in the background (device screen is locked, app is sent to background with home button).

            So I looked at Android docs on Activity and discovered a very useful method – isFinishing() which is called by Android when Activity enters finishing stage: be it explicit finish() call or activity clean up made by Android.

            Using that flag it is very easy to avoid opening dialog from background thread when Activity is finishing:

            runOnUiThread(new Runnable() {
               @Override
               public void run() {
                if(!isFinishing()){
                    showDialog (
                                new AlertDialog.Builder(MainActivity.this)
                            .setTitle(R.string.dialogTitle)
                            .setMessage(R.string.dialogText)
                            .setCancelable(false)
                            .setPositiveButton(R.string.txtOk,
                            new OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                                      // whatever...                        
                                }
                            })
                            .create()
                             );
                   }
               }
            });

             

            As you can see – the fix is very simple and straightforward: just check if your Activity is going to finish before opening dialog.

            posted on 2012-09-19 00:03 大龍 閱讀(1149) 評論(0)  編輯 收藏 引用

            久久精品国产亚洲AV电影| 国产精品久久成人影院| 青青热久久国产久精品| 久久久久久极精品久久久 | 精品久久久久久成人AV| 狠狠人妻久久久久久综合| 久久综合亚洲色HEZYO社区| 无码精品久久久天天影视| 国产精品久久一区二区三区| 亚洲精品乱码久久久久久蜜桃不卡 | 久久精品国产99久久无毒不卡| 伊人久久精品影院| 久久毛片一区二区| 亚洲午夜久久久久久久久久| 久久99国产综合精品免费| 热99re久久国超精品首页| 蜜臀久久99精品久久久久久| 国产精品一区二区久久精品涩爱| 久久久无码精品亚洲日韩京东传媒| 少妇无套内谢久久久久| 无码人妻精品一区二区三区久久 | 久久精品www人人爽人人| 国产精品美女久久久久网| 国内精品久久久久影院网站| 国产香蕉久久精品综合网| 国产精品久久久久久吹潮| 久久夜色tv网站| 7777精品伊人久久久大香线蕉 | 婷婷久久久亚洲欧洲日产国码AV| 精品久久无码中文字幕| 久久激情五月丁香伊人| 无码久久精品国产亚洲Av影片| 亚洲国产精品久久久久婷婷老年| 久久久久国产日韩精品网站 | 久久亚洲精品国产精品| 久久精品成人免费国产片小草 | 久久精品国产AV一区二区三区| 久久精品人人做人人爽电影| 国产精品99久久久精品无码| 亚洲乱亚洲乱淫久久| 三上悠亚久久精品|