• <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>

            大龍的博客

            常用鏈接

            統(tǒng)計(jì)

            最新評論

            Android: annoying exception Unable to add window – is your activity running? --- 轉(zhuǎn)

            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 大龍 閱讀(1148) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久中文字幕无码专区| 久久精品国产亚洲7777| 久久久无码人妻精品无码| 久久99精品国产自在现线小黄鸭| 国产韩国精品一区二区三区久久| 51久久夜色精品国产| 亚洲欧美国产日韩综合久久| 97精品伊人久久大香线蕉app| 热RE99久久精品国产66热| 久久人人爽人人爽人人AV| 国产精品久久久久久久午夜片| 国产精品久久久久免费a∨| 久久99免费视频| 久久久久久精品免费看SSS| 一本大道加勒比久久综合| 影音先锋女人AV鲁色资源网久久| 国产精品日韩欧美久久综合| 久久天天躁狠狠躁夜夜96流白浆 | 国产亚洲色婷婷久久99精品| 91精品国产综合久久香蕉 | 草草久久久无码国产专区| 久久中文字幕人妻丝袜| 久久一区二区三区99| 99久久国产主播综合精品| 99久久国产热无码精品免费| 国产69精品久久久久APP下载| 久久精品国产第一区二区| 亚洲欧美日韩精品久久| 99精品国产在热久久无毒不卡| 亚洲人成伊人成综合网久久久| 超级碰碰碰碰97久久久久| 波多野结衣久久精品| 无码八A片人妻少妇久久| 久久这里有精品视频| 色天使久久综合网天天| 久久影视国产亚洲| 四虎亚洲国产成人久久精品| 欧美无乱码久久久免费午夜一区二区三区中文字幕| 91久久精品91久久性色| 久久精品嫩草影院| 国产成人精品久久亚洲|