Android里面有Application context, 有Activity context,它们的区别呢。有一种很常见的情况:
<application name="com.packagename.TestApplication">
<activity name="A"/>
<activity name="B"/>
</application>
那么在Activity A和B中分别打印:
activity.this.hashCode(); @1 和
activity.this.getApplicationContext().hashCode(); @2
其中@1表示就是Activity context, @2表示的就是Application context。
application context在整个进程空间是不变的,是全局的,生命周期最长,我们可以利用这一点将全局变量记录到这里。
activity context,如果Activity finish了重新创建的时候就会重新创建。重新创建的时候值是变化的。就因为这个,所以程序控制不恰当才会引起bad token, token null这类错误。
上面A和B中打印的各自activity context不一样,但是application context是一样的。但是我们有另外一种情况,如果这两个activity A和B不在同一个process呢。如下
<application name="com.packagename.TestApplication">
<activity name="A"/>
<activity name="B" android:process=":other"/>
</application>
这就很奇怪了,A和B肯定是在不同的进程了。那个把它们包起来的TestApplication是怎么样呈现的呢。依然在A和B中打印出getApplicationContext的hashcode出来分析。发现这两个值不一样。原来A有一份TestApplication, B也有一份TestApplication 。相当于不同的实例。它们都是全局的,可以访问到所有类和方法,但是互不相干,连静态变量也是互不干扰的,因为它们属于不同的进程。