下午擺弄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。