android 中getBaseContext getApplicationContext使用情景
来源:互联网 发布:小米手机数据迁移华为 编辑:程序博客网 时间:2024/06/03 03:11
1.getApplicationContext ()方法在应用程序要被摧毁时,返回整个应用程序生命周期的应用上下文。
2.this应用上下文返回activity的当前上下文,属于activity。当它被摧毁时,activity也被摧毁。
但是在你的事例中它是指Spinner实例,因为我们在onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)方法中使用它。
这个方法是来自Spinner类,而Spinner从AdapterView.OnItemSelectedListener接口中继承这个方法。
3.getBaseContext()是 ContextWrapper中的方法。
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() //这里new了 this指的当前的context是Spinner
{
@Override
public void onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)
{
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show(); //因为这里的this指的不是Activity,而是spinner这个类,改用getBaseContext()
}
getApplicationContext():生命周期是整个应用,应用摧毁,它才摧毁。
getApplication():andorid 开发中共享全局数据;
我们在平时的开发中,有时候可能会需要一些全局数据,来让应用中得所有Activity和View都能访问到,大家在遇到
这种情况时,可能首先会想到自己定义一个类,然后创建很多静态成员,
不过andorid已经为我们提供了这种情况的解决方案:在Android中,有一个名为Application的类,我们可以在Activity中
使用getApplication(),方法来获得,它是代表我们的应用程序的类,使用它可以获得当前应用的主题,资源文件中的
内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性
在android中常常会遇到与context有关的内容
浅论一下context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求传递的 参数就是一个context,
在这里我们传入的是this,那么这个this究竟指的是什么东东呢? 这里的this指的是Activity.this,是这个语句所在的Activity的this,
是这个Activity 的上下文。网上有很多朋友在这里传入this.getApplicationContext(),这是不对的。
AlertDialog对象是依赖于一个View的,而View是和一个Activity对应的。 于是,这里涉及到一个生命周期的问题,
this.getApplicationContext()取的是这个应 用程序的Context,Activity.this取的是这个Activity的Context,
这两者的生命周期是不同 的,前者的生命周期是整个应用,后者的生命周期只是它所在的Activity。而AlertDialog应
该是属于一个Activity的,在Activity销毁的时候它也就销毁了,不会再存在;但是,如果传 入this.getApplicationContext(),
就表示它的生命周期是整个应用程序,这显然超过了它 的生命周期了。 所以,在这里我们只能使用Activity的this。
new AlertDialog.Builder(getApplicationContext())时发生错误:
E/AndroidRuntime(5844): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
于是查了查:
getApplicationContext() 生命周期是整个应用,应用摧毁它才摧毁 Activity.this的context属于activity ,activity 摧毁他就摧毁
activity.this要返回一个activity,而getApplicationContext()就不一定返回一个activity
getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁
getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文
2.this应用上下文返回activity的当前上下文,属于activity。当它被摧毁时,activity也被摧毁。
但是在你的事例中它是指Spinner实例,因为我们在onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)方法中使用它。
这个方法是来自Spinner类,而Spinner从AdapterView.OnItemSelectedListener接口中继承这个方法。
3.getBaseContext()是 ContextWrapper中的方法。
Spinner spinner = (Spinner) findViewById(R.id.spinner);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() //这里new了 this指的当前的context是Spinner
{
@Override
public void onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)
{
Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show(); //因为这里的this指的不是Activity,而是spinner这个类,改用getBaseContext()
}
}
getApplicationContext():生命周期是整个应用,应用摧毁,它才摧毁。
getApplication():andorid 开发中共享全局数据;
我们在平时的开发中,有时候可能会需要一些全局数据,来让应用中得所有Activity和View都能访问到,大家在遇到
这种情况时,可能首先会想到自己定义一个类,然后创建很多静态成员,
不过andorid已经为我们提供了这种情况的解决方案:在Android中,有一个名为Application的类,我们可以在Activity中
使用getApplication(),方法来获得,它是代表我们的应用程序的类,使用它可以获得当前应用的主题,资源文件中的
内容等,这个类更灵活的一个特性就是可以被我们继承,来添加我们自己的全局属性
在android中常常会遇到与context有关的内容
浅论一下context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求传递的 参数就是一个context,
在这里我们传入的是this,那么这个this究竟指的是什么东东呢? 这里的this指的是Activity.this,是这个语句所在的Activity的this,
是这个Activity 的上下文。网上有很多朋友在这里传入this.getApplicationContext(),这是不对的。
AlertDialog对象是依赖于一个View的,而View是和一个Activity对应的。 于是,这里涉及到一个生命周期的问题,
this.getApplicationContext()取的是这个应 用程序的Context,Activity.this取的是这个Activity的Context,
这两者的生命周期是不同 的,前者的生命周期是整个应用,后者的生命周期只是它所在的Activity。而AlertDialog应
该是属于一个Activity的,在Activity销毁的时候它也就销毁了,不会再存在;但是,如果传 入this.getApplicationContext(),
就表示它的生命周期是整个应用程序,这显然超过了它 的生命周期了。 所以,在这里我们只能使用Activity的this。
new AlertDialog.Builder(getApplicationContext())时发生错误:
E/AndroidRuntime(5844): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
于是查了查:
getApplicationContext() 生命周期是整个应用,应用摧毁它才摧毁 Activity.this的context属于activity ,activity 摧毁他就摧毁
activity.this要返回一个activity,而getApplicationContext()就不一定返回一个activity
getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁
getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文
0 0
- android 中getBaseContext getApplicationContext使用情景
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- Android 中 getApplicationContext()、this、getBaseContext()之间的区别
- android中getApplicationContext()、this、getApplication()、getBaseContext之间的区别
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- Android 中几个Context的区别,getApplicationContext(),Activity.this,getBaseContext()
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- Android 中this、getContext()、getApplicationContext()、getApplication()、getBaseContext() 之间的区别
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- Android:getApplicationContext()、Activity.this、 getBaseContext()区别
- android getContext() , getApplicationContext() , getBaseContext() and “this”
- getContext(), getApplicationContext(), getBaseContext()区别
- getApplicationContext 和 getBaseContext 区别
- getApplicationContext()、getBasecontext()、getApplication() 区别
- getBaseContext(),getApplication(),getApplicationContext()
- getApplicationContext()、getBaseContext()、getContext()
- getApplicationContext()、Activity.this、 getBaseContext区别
- C语言的艺术初习
- 基于 python 的接口测试框架
- php依赖注入
- JavaScript滚动到底部触发加载数据
- PullToRefresh上拉加载下拉刷新GridView和ListView
- android 中getBaseContext getApplicationContext使用情景
- spinner 详解
- js调试学习总结
- (笔记)Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
- ubuntu如何配置软件更新源和更新镜像
- error:Cannot assign to 'self' outside of a method in the init family
- 斯坦福大学深度学习笔记:神经网络
- 常用命令总结
- 错误笔记