Android:为什么必须使用getBaseContext()而不是这个
 this经常引用当前的上下文。 但是,在某些情况下,为什么我们必须使用getBaseContext()而不是this 。  (这意味着当使用this将注意到错误)。 
这是我的例子:
 Spinner spinner = (Spinner) findViewById(R.id.spinner); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3){ Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show(); //this line } 
 在上面的代码中,当我更改getBaseContext()时会收到错误。 
谁能为我解释一下。
- 
getApplicationContext ()返回整个应用程序生命周期的应用程序上下文,当应用程序将销毁它也将销毁。
- 
this上下文返回活动的当前上下文,属于活动,活动被销毁,那么它也会被销毁。但是在你的情况下,它会引用Spinner实例,因为我们在onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)中使用了这个onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3)从Spinner类和Spinnerinheritance此方法的方法AdapterView.OnItemSelectedListener接口
- 
getBaseContext()是ContextWrapper的方法。ContextWrapper是“ 代理上下文的实现,它将所有调用简单地委托给另一个上下文,可以被修改为不改变原始上下文的子类 ”(按照javadocs)。
  在你的情况下: Spinner类不是Context或ContextWrapper类的子类* 
 Toast.makeText(getBaseContext(),"SELECTED", Toast.LENGTH_SHORT).show(); 
 意思是getBaseContext()是ContextWrapper方法,而ContextWrapper是代理Context实现,所以间接地传递一个Context Class对象。 
 或者我们也可以传递'Activity.this',因为Activity类是ContextWrapper类的子类。 
 如果你使用android文档,那么这个方法需要一个Context类对象: 
 public static Toast makeText (Context context, int resId, int duration) 
 所以我们不能传递一个活动或类的上下文意味着this Toast.makeText没有Context或ContextWrapper类的子类。 
 在你的例子中, this是指新创build的OnItemSelectedListener不是任何上下文对象。 如果此代码处于活动状态,则可以编写YourActivity.this而不是getBaseContext() 。 
 OnItemSelectedListener listener = new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?>arg0, View arg1, int arg2, long arg3){ // this.equals(listener) == true; // getBaseContext() here means YourActivity.this.getBaseContext() // getBaseContext() called from outer context object (activity, application, service) } } 
 如果此代码位于Activity MyActivity ,则也可以用getBaseContext()replacegetBaseContext() 。 
 这是因为this是指OnItemSelectedListener实例,而不是Activity。  getBaseContext()引用Activity上下文。 
 如果你使用this指的是OnItemSelectedListener 。和它的Interface not Class .so,它会给你错误,,,如果你在Activity YourActivityName.this 
  OnItemSelected方法这是指您使用的新的OnItemSelectedListener实例。  getBaseContext是你的外部类。 
getBaseContext()引用Activity.this
就像我们想要点击button显示烤面包,我们从来没有用这个我们使用Activty.this。 这样,我们的吐司显示,直到我们在同一个活动。 但是,如果我们使用getApplicationContext()比我们的Toast将显示甚至我们切换活动。
getBaseContext()有时会把新的angular色混淆到android,相反,也可以使用ActivityName,它是你正在工作的当前活动。 所以ActivityName.this将取代getBaseContext()