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

            伊人久久免费视频| 中文字幕久久精品无码| 漂亮人妻被黑人久久精品| 久久精品www人人爽人人| 久久黄视频| 久久婷婷五月综合97色一本一本 | 久久久久国产| 国内精品综合久久久40p| 人人狠狠综合久久亚洲88| 亚洲AV无一区二区三区久久| 久久久久久亚洲精品不卡| 久久人人爽人人爽人人片av高请| 日本免费久久久久久久网站| 久久精品国产2020| 久久久久久精品免费看SSS | 国产午夜电影久久| 大香网伊人久久综合网2020| 亚洲精品无码久久毛片| 精品无码久久久久久久久久| 亚洲人成伊人成综合网久久久| 99久久国产主播综合精品| 久久国产欧美日韩精品| 久久亚洲视频| 亚洲精品乱码久久久久久| 久久久WWW成人免费毛片| 狠色狠色狠狠色综合久久| 99久久精品毛片免费播放| 狠狠色丁香婷婷综合久久来| 97精品依人久久久大香线蕉97 | 伊人精品久久久久7777| 国产呻吟久久久久久久92| 999久久久免费国产精品播放| 99久久777色| 97精品伊人久久大香线蕉app| 久久久久人妻一区二区三区vr | 久久香蕉国产线看观看99| 久久久免费精品re6| 久久精品a亚洲国产v高清不卡| AV无码久久久久不卡蜜桃| 国产69精品久久久久观看软件| 亚洲综合熟女久久久30p|