• <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)  編輯 收藏 引用

            欧洲成人午夜精品无码区久久| 91精品国产高清久久久久久91 | 亚洲а∨天堂久久精品| 久久免费精品一区二区| 99热都是精品久久久久久| 一本色综合久久| 久久久久久亚洲精品成人| 久久99国产亚洲高清观看首页 | 欧美久久综合性欧美| 久久久久久久国产免费看| 99久久国产宗和精品1上映| 久久w5ww成w人免费| 久久亚洲国产成人精品无码区| 无码人妻少妇久久中文字幕蜜桃| 久久伊人精品青青草原高清| 综合久久给合久久狠狠狠97色 | 国内精品久久久久久久久电影网 | 久久精品国产福利国产琪琪| 久久精品国产色蜜蜜麻豆| 93精91精品国产综合久久香蕉| 久久综合亚洲色一区二区三区| 青青国产成人久久91网| 无码人妻久久一区二区三区| 久久中文精品无码中文字幕| 久久综合丝袜日本网| 久久国产色AV免费看| 亚洲国产精品无码久久98| 欧美激情一区二区久久久| 久久国产AVJUST麻豆| 久久亚洲中文字幕精品一区四| 国产精品午夜久久| 欧美久久综合性欧美| 久久香蕉一级毛片| 久久99国产精品二区不卡| 久久久久久久亚洲Av无码| 久久久久久无码Av成人影院| 欧美噜噜久久久XXX| 91精品国产乱码久久久久久| 久久久久久无码Av成人影院| 久久精品国产99国产电影网 | 色诱久久久久综合网ywww|