Toast.maketext第一个参数context的问题

在Android工程中常常用到 Toast来显示提示,在maketext的第一个参数是要求传递一个context
那么问题来了
 有时候是使用getApplicationContext();
 有时候是Activity.this
 而有时候又直接是 thisandroid

在android中经常会遇到与context有关的内容,大多都是做为参数在传递,可是它的做用到底是什么呢ui

先说它的用法,举个例子this

在语句 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。spa

 

下面具体解释它的内涵orm

其实Activity.this就是context的一个具体,Activity.this是你当前所在的activity的上下文,this.getApplicationContext()取得的是整个应用的上下文,在你把他们做为参数传递的时候,多数是用来标注你要在哪一个activity里面进行操做,好比上文提到的AlertDialog.Builder builder = new AlertDialog.Builder(this);你是要在当前的activity里面建立对话框,若是传递的是this.getApplicationContext(),这是整个应用的上下文,代码怎么会知道你想在哪一个具体的activity里面建立对话框呢,因此,在这里应该传入的是你想建立对话框的那个activity的上下文,即Activity.this.若是这你都理解了,那么你也该明白,每一个activity都有本身的上下文,而整个应用只有一个上下文.对象

 

总结生命周期

getApplicationContext()
返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁。


Activity.this 
get

返回当前activity的上下文,生命周期只是它所在的Activity,activity 摧毁他就摧毁it

相关文章
相关标签/搜索