参考http://blog.csdn.net/woaieillen/article/details/10234807
- 从上面两张图我们可以看出:Application和Activity都是继承自Context
- Application对象是整个应用的上下文(通过打印日志可知:无论在哪里,通过getApplication或getApplicationContext得到的都是同一个Cotext对象,也就是应用的上下文),而Activity则不同,虽然都是继承自Context,但是在Activity中this和getApplication(getApplicationContext)得到的对象不是同一个!Activity的this这个上下文可用于界面UI的构造等(如弹窗,new View),而Application则不行。
在Acctivity中通过getParent获得的也是Activity对象(父activity)。顺便扩展一下,这个方法是只有当activity是一个嵌入式的activity时才返回父activity(否则为null)。如下,查看Activity源码的说明:
/** Return the parent activity if this view is an embedded child. */ public final Activity getParent() { return mParent; }
通过 getBaseContext获得的上下文对象则各不相同,引用google工程师的一句话:
Don’t use getBaseContext(), just use the Context you have.
不要使用getBaseContext(),只使用你有的Context。Application(或者说应用的上下文对象)是和应用程序关联的,并且在程序的生命周期内,总是一样的。而Activity(Activity的上下文)是关联在某个活动上的,随着Activity的销毁(比如横竖屏切换等情况),这个Context也会被销毁N多次。