刚看了一篇关于二者关系的文章,最后一段没什么用,所以就截取了一段,自己做一下分析,哈哈哈。以下是原文
Context,我们在android开发中经常见到这个名词,尤其是某些方法的参数列表,像是我们Toast中的makeText()中的第一个参数,就是Context。可以这么说,Context是 android中的基础,只有切实掌握好Context的概念和用法,我们才能写出更好的代码。那么,现在就让我们一起来看一下所谓的Context。
Context,如果是直接从文档翻译过来,就真的是十足的专业了:提供应用环境全局信息的接口,并且这个接口是由抽象类实现的,它的执行被android系统所提供,允许我们获取以应用为特征的资源和类型,同时启动应用级的操作,如启动Activity,broadcasting和接收intent。
从这段话就可以发现,Context就是一个作为接口使用的抽象类,而且这个接口提供的是应用的全局信息,因为是android系统所提供的,所以我们大多时候都是可以直接得到的,这点会在下面讲到。我们来看看它的用处,允许我们获取以应用为特征的资源和类型,同时启动应用级的操作。什么意思?通俗来讲,就是我们可以获取其他应用的资源和类,至于下半句的启动应用级的操作,我们可以暂时忽略,因为不是这里的重点。
一.Context的作用
Context的最大作用就是我们可以通过传递它来获得其他Activity或Application的相关资源和方法,它就相当于它们的引用,我们通过引用来获得对象的封装,这也是我们面向对象的基础,所以,我们主要利用它来加载和访问资源。
class A extends Application{}
现在,我们在这个类中添加一些东西来证明可以通过Context来获得A的相关资源和方法。这次我们使用一个Toast。
首先,是在我们的类A里添加以下的内容:
String s = "hello"; public String getString(String str){ s = str; return s; }
然后再在我们的Activity B中尝试取用A的数据和方法:
A a = (A)getApplicationContext(); String s = a.s; s = a.getString("hello word"); Toast.makeText(this, s, Toast.LENGTH_LONG).show();
然后我们还必须注意在我们的mainfest文件中注册我们的application:
<application android:name=".A"></application>
注意,我们的mainfes始的at文件中一开pplication是没有名字的,因为我们一般都只是启动一个Activity,而不是一个application,所以,可以将我们这个application的名字注册为继承自Application的子类A,这样才能正常显示出一个Toast出来。如果没有这么做,就可能报出这样的错误:android.app.Application cannot be cast to A。
在上面的例子中可以看到,通过一个Application的子类就能在我们的Activity中调用它的资源和方法,但是其实完全可以不用这样做,声明一个class,然后new一个实例同样可以做到这点,但是这里只是想要大家明白,Context的确可以传递相关类的引用,并且通过这个引用来获取相关类的资源和方法,而且这个Context甚至可以转化为具体的子类,我们的getApplicationContext()返回的其实是一个Context,之所以能将它转换为A,是因为Context传递的就是Application-Context,它是一个Application类型的,而类A是Application的子类,父类转化为子类,这里就会有个疑问,就是我们的父类是不可以强制转化为子类的,因为子类可能有父类没有的方法,这样的转化就会出现问题,但是,我们也知道,可以将子类的引用转化为父类,因为父类的引用是可以指向子类的,所以这里是想说明我们的Context真的是一个引用。
Application-Context的生命周期为整个Application,所以如果是一些需要在整个应用期间都存在的资源,我们可以将它放进一个Application-Context中,然后通过获取这个Context来使用它们。
Intent intent = new Intent(Activity1.this, Activity2.class); startActivity(intent);
这个Activity1就是我们要显示Toast的Activity,而Acticity2就是我们设置Toast的Activity。
原文http://www.cnblogs.com/wenjiang/archive/2012/10/15/2724923.html
整体来说,就是activity的context也就是当前activity.this,它的生命周期是和activity一样的。同理,application的context就会一直伴随着整个程序。让一个dialogshow一下的话,或者popwindowshow一下,就要用activity的context了。像那些和图片有关的持有对象的context必然要用activity的context,否则你一直持有对图像资源的引用,那当然就会造成内存泄露,是吧。还有什么basectx那些,没去看。