记忆总是会慢慢褪去,所以让文字记住一切~
分类: Android平台
2017-02-26 16:29:59
浅谈一下Context
这里涉及到一个生命周期的问题,getApplicationContext()取的是这个应用程序的Context,getActivity()获取的就是这个Activity的Context,这两者的生命周期是不同的,前者的生命周期是整个应用程序的运行期间,应用摧毁它就会被摧毁;后者的生命周期只是它所在的Activity,Activity被摧毁它就不存在了。正是由于AlertDialog是属于一个Activity的,在Activity销毁的时候它也就销毁了,不会再存在;但是,如果传 入应用程序的Context,就表示它的生命周期是整个应用程序,这显然超过了它 的生命周期了。
在Android中我们经常调用一些函数的时候需要传入context对象,如在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this.getActivity())中,要求传递的参数就是一个context,在这里我们传入的是getActivity()返回的对象,那么这个究竟指的是什么呢?
很明显,我们调用Dialog的地方一般在一个Fragment或Activity中,Fragment其实寄宿于Activity,归根结底Dialog是在寄宿在Activity上的View上面,那它需要传入的是Activity这个上下文。这个地方我们就不可以使用getApplicationContext()来返回给Dialog。
========
AlertDialog.Builder(getApplicationContext())时会发生如下错误:
E/AndroidRuntime(5844): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
=========
P.S.