下午擺弄ProgressDialog,進入就拋錯:android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application,讓我百思不得其解。我這使用這種方法實現的進度對話框:proDialog = ProgressDialog.show(getApplicationContext(), "sadfs", "dddddd",true);
查證得知html
致使異常的緣由就是這個getApplicationContext(),雖然這裏的參數也是得到一個context,但不能使用getApplicationContext()得到的Context。必須使用Activity,由於只有一個Activity才能添加一個窗體android
解決方法:將參數中的getApplicationContext() 改成xxActivity.this就ok了app
ProgressDialog對象是依賴於一個View的,而View是和一個Activity對應的。 因而,這裏涉及到一個生命週期的問題,this.getApplicationContext()取的是這個應 用程序的Context,Activity.this取的是這個Activity的Context,這二者的生命週期是不一樣 的,前者的生命週期是整個應用,後者的生命週期只是它所在的Activity。而ProgressDialog應
該是屬於一個Activity的,在Activity銷燬的時候它也就銷燬了,不會再存在;可是,若是傳 入this.getApplicationContext(),就表示它的生命週期是整個應用程序,這顯然超過了它 的生命週期了。 因此,在這裏咱們只能使用Activity的this。this