LotusLoveNature

日常工作,生活小记

今天又理解了一点东西ApplicationContext和ActivityContext

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 。相当于不同的实例。它们都是全局的,可以访问到所有类和方法,但是互不相干,连静态变量也是互不干扰的,因为它们属于不同的进程。

评论
©LotusLoveNature | Powered by LOFTER