用了这么久的Context,对于Context究竟是个什么玩意一直不是很明白。看了网上十几篇文章的介绍 加上自己的理解总结一下。(自己想法,不对勿喷,不想照搬网上一些文字说法来糊弄自己,自己理解的就这么多,有谁好的补充记得提一下 我好加进去,谢谢了啊)
1,我们需要明白的是Context是Activity Application Service 的抽象基类,官方翻译其实Activity里面有一个引用context,Application里面有一个引用context。两个不同的引用的context的生命周期是不一样的。为什么要封装这么一个东西 其实我不是很明白,忘哪位大神给个例子说明一下。
2,不是很牛逼的大神当然只要知道怎么用就好了啊,
(1)最常用的就是就是startActivity。一般来说传的是这个Activity的context引用。用getApplication的引用好像也是可以的。但是有人说需要创建一个新的task。一般情况不推荐。我在android6.0的小米机器上使用是直接可以的。 反正跳转Activity一般使用 activity的引用。
(2)一般我们会对已有的API进行封装。一般会使用静态的方法并且使用单例。很多时候需要传Context,一般这个时候当static是一个强引用,使用Activity的时候当Activity销毁的时候,context的引用无法被回收 导致类存泄露。(内存检测工具 LeakCanary 非常的方便 可以非常清楚的定位那个地方内存泄露),这个时候我们应该用全局的Application的引用context
(3)创建activity或者图片或者组件的创建,应该使用Activity的context,不然因为Application是全局的导致这些资源无法及时得到释放,导致内存泄露。
COPY 别人的话:
1,凡是跟UI相关的,都应该使用Activity做为Context来处理;其他的一些操作,Service,Activity,Application等实例都可以
2,(官方翻译)提供应用环境全局信息的接口,并且这个接口是由抽象类实现的,它的执行被android系统所提供,允许我们获取以应用为特征的资源和类型,同时启动应用级的操作,如启动Activity,broadcasting和接收intent
3,添加一个很有用的图