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

            亚洲国产成人久久精品99 | 91麻豆国产精品91久久久| 久久强奷乱码老熟女网站| 久久无码av三级| 久久亚洲美女精品国产精品| 久久精品成人免费观看97| 久久久久99精品成人片欧美| 亚洲人成网站999久久久综合 | 香蕉aa三级久久毛片| 久久亚洲精品中文字幕| 免费精品久久久久久中文字幕| 国产午夜免费高清久久影院| 精品久久亚洲中文无码| 日本精品久久久久中文字幕8 | 97久久精品国产精品青草| 亚洲日本va中文字幕久久| 99精品国产免费久久久久久下载 | 久久精品国产精品亚洲人人| 久久久精品视频免费观看| 精品综合久久久久久98| 久久精品成人一区二区三区| 97久久超碰国产精品旧版| 污污内射久久一区二区欧美日韩| 狠狠色丁香久久综合五月| 国产V亚洲V天堂无码久久久| 欧美国产精品久久高清| 日本一区精品久久久久影院| 久久精品国产精品亚洲毛片| 久久国产亚洲精品| 亚洲精品乱码久久久久66| 久久综合国产乱子伦精品免费| 人妻精品久久久久中文字幕| 国产巨作麻豆欧美亚洲综合久久| 久久综合成人网| 久久久中文字幕日本| 精品视频久久久久| 久久久久青草线蕉综合超碰| 久久久久99这里有精品10| 亚洲人成无码久久电影网站| 伊人 久久 精品| 无码日韩人妻精品久久蜜桃 |