一、概念
-
context字面意思是上下文、场景,也就是用户与操作系统操作的一个过程
-
如打电话,场景包括电话程序对应界面,以及隐藏在背后的数据
-
-
Context是一个抽象类,Activity、Service、Application等都是该类的一个实现
-
我们通过Context访问当前包的资源和启动其他组件以及得到各种服务
-
可以把Context理解为提供了一个应用的运行环境
-
-
Context与ApplicationContext
-
ApplicationContext是Application的实例
-
XXXActivity指的是当前Activity的实例,getApplicationContext()指的是项目的Application的实例
-
如果在某个类被定义为静态强引用,其内部引用了一个Activity作为Context,那么我们这个Activity只要项目还或者,就没办法进行内存回收,因此造成内存泄漏
-
使用区别
-
-
-
-
No1:启动Activity在这些类中是可以的,但是需要创建一个新的task,一般不推荐
-
No2:这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果自定义了某些样式可能不会被使用
-
No3:在receiver为null时允许,在4.2或以上版本中,用于获取黏性广播的当前值
-
-
和UI相关的都不可以使用Application
-
-
getApplication和getApplicationContext的区别
-
getApplication返回结果为Application,不同的Activity和Service返回的Application均为同一个全局对象
-
这是因为Activity和Service的getApplication返回的Application对象是由ActivityThread创建它们的时候通过它们的attach方法传递给它们的
-
所有Activity和Service持有的Application均为ActivityThread内部的Application
-
-
-
getApplicationContext返回结果也为Application对象,不过返回类型为Context
-