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()
    }

}


this:代表当前,在Activity当中就是代表当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this.
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
原创粉丝点击