Android上下文——两种上下文的对比 getApplicationContext()与Activity.this的浅认识
来源:互联网 发布:右下角网络图标不见了 编辑:程序博客网 时间:2024/05/21 17:04
在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 用于测试和内容提供者,并不是真实的上下文对象。
0 0
- Android上下文——两种上下文的对比 getApplicationContext()与Activity.this的浅认识
- getApplicationContext和Activity.this两种上下文的区别
- Android中this和getApplicationContext()两种上下文的区别
- Android的上下文环境Activity的this和getApplicationContext的区别
- 安卓开发:在Activity中使用getApplicationcontext()与this获取上下文对象的区别
- android getApplicationContext()与activity.this的区别
- Android中的两种上下文的区别
- android 中的两种上下文的区别
- getApplicationContext与Activity.this,getBaseContext的区别
- Android:Activity.this与getApplicationContext()
- android 两种上下文
- Android Context上下文(几种的对比,应用场景)
- Android编程之getApplicationContext(),activity.this,this的区别
- Android中Context、getApplication、getApplicationContext、this、Activity.this的区别
- Android小项目之九 两种上下文的区别
- getApplicationContext()与Activity.this
- SELinux安全上下文的认识
- spring上下文的两种配置方法
- EasyUI+JQuery轻松实现步骤条效果
- 用C/C++来实现 Node.js 的模块(下)
- android-Ultra-Pull-To-Refresh 源码解析
- Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
- Android问题集锦之四十六:改包名后出现Error type 3
- Android上下文——两种上下文的对比 getApplicationContext()与Activity.this的浅认识
- 从实战项目学习Android(一)前言
- 用户友好性检测
- 【郝斌数据结构自学笔记】9_malloc()动态分配内存概述
- 数字签名和公钥,密钥加密机制
- MySQL条件判断函数
- Android java代码与js交互问题
- 数组和对象的区别
- 标记粘贴运算符 (##)