Android中关于Context的思考
网上看了一些关于Context的解释,感觉说得都不太易懂,理解起来费力。在问了同事之后有了一个比较模糊的概念,先在这里写下来,作为备注,也欢迎探讨。
Context:上下文的意思,简而言之就是提供一个语句解读的环境,例如有一句话:不许动。这句话如果分别加个前提“那是别人的东西,不许动。” “你已经被包围了,不许动。”意思就完全不同了,一段代码一个方法就像一句话,而Context就是给这句话提供一个理解环境。
知道Context的大概意思以后,怎么用?网上看到有好多传入方法,例如显示一个吐司:Toast.makeText(context, "只是单纯做个例子", 0).show();
这里的context的传入各种各样,我大概见到过以下几种:
this:一般当Toast这个方法在一个继承Activity类的子类中时,可以直接调用this,表示使用当前的Activity这个环境来解析这段代码。
MainActivity.this:一般MainActivity extends Activity,所以其实跟使用this差不多。
//那么问题来了!
我提出:既然说当一个类继承Activity,我们在上下文中就可以传入this,干脆我把所有自建类都extends Activity算了。
同事解答:Activity需要加载界面,自定义类没有界面加载怎么运行?
想想也是,继承Activity需要重写
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);}
so~~~全都extends Activity方法不可行。
我又提出:那么我碰到Context全都传入MainActivity.this呢?
同事解答:可以啊,但是首先你要把MainActivity的上下文环境传入到你这个自定义类中并保存,或者是你在MainActivity中建立一个子类的时候。
this.getBaseContext():获得应用程序的一个基础上下文
this.getApplicationContext():获得应用程序的上下文
mcontext.this:mcontext为用来接收保存传入上下文的变量
//其实说了那么多,我也晕了 =。=,之所以把上面那些记录下来,就是为了以后帮助回忆。重点来了,大家忽略我上面讲的废话直接来看重点吧。
1、当一个类继承了Activity,那么在这个类中需要传入context的时候直接传入this(可以理解为看此时this是否代表当前类)
2、当一个继承了Activity的类(假设是MainActivity)又创建了一个内部类或者匿名类的时候,那么需要传入context就传MainActivity.this,因为此时用this代表的是你这个内部类或匿名类。
3、当两个不同的文件的时候,如果需要引用上下文,例如我在MainActivity.java中调用Test.java的一些方法,而Test.java中又需要引入上下文,这时需要在Test.java中建立一个Context变量mcontext来接收并保存传入的上下文环境,然后用mcontext.this调用。
4、我们知道,一个应用程序包含多个Activity,当我在Activity2中要使用Activity1的上下文环境,而此时Activity1已关闭,那么需要用getBaseContext()或者getApplicationContext()来调入context。getBaseContext()比getApplicationContext()更常用些。
对于第4条的理解,需要再看看Activity的相关运行原理才能理解透彻,本人初学,尚无法深入。
以上为Context理解备注,共习之。