關於ProgressDialog.show拋出android.view.WindowManager$BadTokenException: Unable to add window


        下午擺弄ProgressDialog,進入就拋錯:android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application,讓我百思不得其解。我這使用這種方法實現的進度對話框:proDialog = ProgressDialog.show(getApplicationContext(), "sadfs", "dddddd",true);
查證得知

導致異常的原因就是這個getApplicationContext(),雖然這里的參數也是獲得一個context,但不能使用getApplicationContext()獲得的Context。必須使用Activity,因為只有一個Activity才能添加一個窗體


解決方法:將參數中的getApplicationContext() 改為xxActivity.this就ok了


ProgressDialog對象是依賴於一個View的,而View是和一個Activity對應的。 於是,這里涉及到一個生命周期的問題,this.getApplicationContext()取的是這個應 用程序的Context,Activity.this取的是這個Activity的Context,這兩者的生命周期是不同 的,前者的生命周期是整個應用,后者的生命周期只是它所在的Activity。而ProgressDialog應
該是屬於一個Activity的,在Activity銷毀的時候它也就銷毀了,不會再存在;但是,如果傳 入this.getApplicationContext(),就表示它的生命周期是整個應用程序,這顯然超過了它 的生命周期了。 所以,在這里我們只能使用Activity的this。







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM