关于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);
查证得知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




相关文章
相关标签/搜索