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理解备注,共习之。

 

posted @ 2015-08-20 15:11  菜鸟学C  阅读(485)  评论(0编辑  收藏  举报