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

            久久久久久九九99精品| 久久婷婷五月综合色奶水99啪| 久久久免费精品re6| 国内精品久久久久影院日本 | 色婷婷噜噜久久国产精品12p| 午夜精品久久久久成人| 久久久久久亚洲AV无码专区| 久久久久国产一级毛片高清版| 久久久精品日本一区二区三区| 三上悠亚久久精品| 精品久久综合1区2区3区激情 | 91亚洲国产成人久久精品网址 | 久久久精品人妻一区二区三区蜜桃 | 狠狠色丁香婷婷久久综合不卡| 久久综合久久鬼色| 99久久精品国产麻豆| 色综合久久中文字幕综合网| 人人狠狠综合久久88成人| 亚洲国产香蕉人人爽成AV片久久| 久久久久亚洲Av无码专| 久久久国产亚洲精品| 狠狠久久综合伊人不卡| 97超级碰碰碰久久久久| 99久久99久久精品国产片果冻 | 久久久久久青草大香综合精品| 亚洲国产美女精品久久久久∴| 久久久久无码精品国产app| 韩国无遮挡三级久久| 久久精品国产亚洲精品2020| 精品久久久久久久国产潘金莲| 久久精品一区二区三区中文字幕| 久久综合给合久久狠狠狠97色| 久久久久高潮综合影院| 欧美国产成人久久精品| 97视频久久久| 久久久无码精品亚洲日韩京东传媒| 久久亚洲国产精品五月天婷| 久久久久一本毛久久久| 久久播电影网| 久久亚洲AV成人无码| 亚洲中文久久精品无码ww16|