1. 程式人生 > >視窗異常 android.view.WindowManager$BadTokenException

視窗異常 android.view.WindowManager$BadTokenException

昨天測試時發現這個BUG,當時我也很好奇這個問題是,怎樣產生的。我開啟錯誤日誌看見是這樣提示的。

android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running?
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:676)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
    at android.app.Dialog.show(Dialog.java:312)
    at com.mx.study.view.Loading$1.handleMessage(Loading.java:63)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:5835)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

這也是我第一次遇見這個異常,我感覺很詭異,有時會出現,有時又不出現。這個就有點蛋痛了。查詢了資料。

異常的大概意思 :android.view.WindowManager $ BadTokenException:無法新增視窗 - 令牌null是無效的; 為您的活動執行?

1.這裡主要說的是你的android裡一個Activity發生窗體洩漏了,也就是我們常說的記憶體洩漏,為什麼窗體會洩漏,

主要是你的開啟一個PopupWindow(窗體)時,如圖。它沒有關閉PopupWindow(窗體),就退出這個Activity,就會發生這個錯誤,

因為這裡就有一個順序,你要先關閉PopupWindow,再關閉Activity,這個一定的,PopupWindow(窗體)不能獨立存在。

2.明白這個,你就容易解決了,你先用(dismiss)關閉就行,在你的窗體需要關閉時,加上這句:

(PopupWindow.dismiss;)PopupWindow這個是你專案裡你窗體的名字。最好做一個判斷,判斷窗體是否為空,如果不為空就關閉,不然有時空也關閉也會出錯。

大概出現的情景是這樣的:我上一個Activity裡面滑動的時候突然,閃了一下。我知道這個肯定出現BUG,但是當前介面的Activity並沒用到,WindowManager 和彈窗。我想是不是我之前沒有關閉上一個Activity的彈窗。

於是我在程式碼中是這樣寫的。

 if(chaptersWindow!=null){
      chaptersWindow.dismiss();
 }
 if(popupWindowSelect!=null){
     popupWindowSelect.dismiss();
 }
 finish();
最後就沒有出現這個異常,第一次遇見這個異常,記一下是怎樣解決的。希望對大家有幫助。

相關推薦

視窗異常 android.view.WindowManager$BadTokenException

昨天測試時發現這個BUG,當時我也很好奇這個問題是,怎樣產生的。我開啟錯誤日誌看見是這樣提示的。 android.view.WindowManager$BadTokenException: Unabl

Android實現浮窗時報的android.view.WindowManager$BadTokenException: Unable to add window異常

今天在實現Android浮窗時,報了一個異常android.view.WindowManager$BadTokenException: Unable to add window 根據以往的經驗,出現這問題一般是我們的Context不正確,但是getApplicationContext、getAp

bug_ _ android.view.WindowManager$BadTokenException: Unable to add window -- token

運行 問題 彈出 跳轉 不存在 ber 需要 順序 tab android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@41791b

android.view.WindowManager$BadTokenException: Unable to add window-permission denied 完美相容8.0的系統

問題,從問題反饋看就是 window type許可權拒絕導致,我的dialog設定的type為 mWindow.setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)); 安卓6.0及以後該許可權需要手動

解決在BroadcastReceiver(廣播接受者)中不能新增AlertDialog(對話方塊)的問題(android.view.WindowManager$BadTokenException

在BroadcastReceiver,當我們建立一個AlertDialog並show出來的時候,出現了下面的錯誤: 12-24 14:10:57.025: E/AndroidRuntime(17600): java.lang.RuntimeException: Unable

ToastUtil:修復Android 7.x裝置Toast顯示時丟擲的WindowManager$BadTokenException Token失效異常

最近在專案新版本測試中,當在Android 7.x(SDK=24/25)裝置上跑Monkey測試APP時,經常報Token失效異常:“android.view.WindowManager$BadTokenException: Unable to add wind

Android View繪制知識問答

oid 不同 無法獲得 code pos ren ecs post 基本   1.View的繪制流程分幾步,從哪開始?哪個過程結束以後能看到view?   答:從ViewRoot的performTraversals開始,經過measure,layout,draw 三個流程

Android View的測量

idt protected 允許 默認 ted onmeasure and htm 三種 一、簡介   Android系統在繪制View前,必須對View進行測量,即告訴系統該畫一個多大的View。這個過程在onMeasure()方法中進行。Android系統提供了Mea

at android.view.LayoutInflater.createViewFromTag的錯誤原因

檢查 mta string bject 報錯 except .com view com 創建對話框時出現下面的錯誤: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method ‘

Android View系統解析(下)

target 過程 getc ets 解包 有時 消息隊列 nbsp 實現 轉載請註明出處:http://blog.csdn.net/singwhatiwanna/article/details/38426471(來自singwhatiwanna的csdn博客)Andr

Android View框架的measure機制

bili llc 過程 posit 完整 http vertical 模式 而且 概述 Android中View框架的工作機制中,主要有三個過程: 1、View樹的測量(measure)Android View框架

談談我對Android View事件分發的理解

event 調用 ack 處理 group ans import ras 運行 寫這篇博客的緣由。近期因為項目中用到相似一個LinearLayout中水平布局中,有一個TextView和Button,然後對該LinearLayout布局設置點擊事件。點擊

android view的 繪制流程

視圖 mtr com androi .com android als 方法 per 韓夢飛沙 韓亞飛 [email protected]/* */ yue31313 han_meng_fei_sha 首先是 從 視圖根 這個類的 進行遍歷 pe

android.view.animation(2) - 插值器Interpolator

tin logs lis png 16px tor 文件 anim near public interface Interpolator implements TimeInterpolator android.view.animation.Interpolator

android view狀態保存

line 幫助 static sel 兩個 freeze 除了 get 否則 為什麽我們需要保存View的狀態? 這個問題問的好!我堅信移動應用應該幫助你解決問題,而不是制造問題。 想象一下一個非常復雜的設置頁面: 這並不是從一個移動應用的截圖(這不是典型的win32程序

Android view顯示在軟鍵盤上方

文件中 cti scrollbar spa roi editview gpo clas mat 給EditText外加一個ScrollView,將高度設置統一,並給ScrollView設置屬性 android:fillViewport="true"。 註:Scroll

Android View 的工作流程和原理

生成 它的 isl canvas mask lis mat cep 少見 參考資料 << Android 開發藝術探索 >> 前言 在日常開發中,我們每天都在和各種 View 打交道,比如TextView,Button等,我們直接拿過來就可以使用

Android View移動的六種方法

olly sce extends validate 分割 down star 相反數 raw 如果你將滑動後的目標位置的坐標傳遞給layout(),這樣子就會把view的位置給重新布置了一下,在視覺上就是view的一個滑動的效果。 layout public cl