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

            最新評論

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

            久久www免费人成看国产片| 人妻无码精品久久亚瑟影视| 一本色道久久88加勒比—综合| 91精品国产色综久久| 日韩人妻无码一区二区三区久久99| 欧美喷潮久久久XXXXx| 久久久精品人妻无码专区不卡| 国产精品一区二区久久精品涩爱| 国产成年无码久久久久毛片| 久久夜色撩人精品国产| 久久99精品久久久久久久久久 | 亚洲av成人无码久久精品| 国产亚洲色婷婷久久99精品91| 亚洲va中文字幕无码久久不卡 | 久久免费香蕉视频| 久久久中文字幕| 欧美精品久久久久久久自慰| 久久久久这里只有精品 | 久久久久久久久久久久中文字幕 | 久久精品人人做人人妻人人玩| 久久久久97国产精华液好用吗| av无码久久久久不卡免费网站| 综合久久一区二区三区| 久久久久亚洲精品中文字幕| 97热久久免费频精品99| 性做久久久久久久| 亚洲狠狠婷婷综合久久蜜芽| 欧美亚洲国产精品久久| 久久人人爽人人爽人人片AV麻豆| 精品国产一区二区三区久久| 亚洲欧美日韩久久精品第一区| 婷婷久久五月天| 亚洲国产高清精品线久久| 亚洲婷婷国产精品电影人久久| 久久精品成人欧美大片| 久久高清一级毛片| 久久亚洲av无码精品浪潮| 蜜臀久久99精品久久久久久| 久久97久久97精品免视看秋霞| 精品免费久久久久国产一区| 精品久久久久国产免费|