您的位置:首页 > 移动开发

Android上下文——两种上下文的对比 getApplicationContext()与Activity.this的浅认识

2015-11-15 23:08 423 查看
在Android application开发中,我们经常使用Context上下文对象,Context上下文对象是代表当前运行环境的组件的上下文,是一种环境的定义。

在Android中有两种方式表示上下文的对象

1. getApplicationContext()

2. Activity.this

通过阅读源码我们知道,Activity是继承自上下文Context的,所以说Activity是Context的子类。

根据JAVA继承的特点,子类继承父类会保持(持有)父类的特性,并且对父类进行拓展,也就是说Activity继承了Context后,Context有的功能与方法在Activity中一定有,但是子类Activity中拓展的功能父类中就没有了。

拿一个常见的例子来解释:

在Android中我们使用对话框时,创建对话框的时候需要使用Dialog中的Builder内部类来创建对话框的标题、图标、内容等。这时

AlertDialog.Builder builder = new Builer();


这个构造方法传递的是一个上下文的对象,这里如果使用getApplicationContext()的话会报出

android.view.WindowManagerBadTokenException异常。

这个异常的意思是:由于Dialog是Activity的一部分,所以dialog是显示在Activity中的,Dialog是挂载在Activity中的,这里构造如果传递父类的上下文对象的话会导致显示的对话框不明确在哪里显示。所以Google规定,在构造对话框的时候应当传递当前或者依赖的Activity对象。作为Activity是可以挂载对话框的。

AlertDialog.Builder builder = new Builer(MainActivity.this);


也就是传递一个Activity的对象即父类Context的子类对象。

关于getContext()这个API是一个模拟的获取上下文对象的API 用于测试和内容提供者,并不是真实的上下文对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: