android静态类context,Android爬坑之路(十八)Context的理解

Context概念:从Android系统的角度来理解,Context是一个场景,代表与操作系统的交互的一种过程。从程序的角度上来理解,Context是个抽象类,而Activity、Service、Application等都是该类的一个实现,其通用实现在ContextImpl类中。它的主要作用是一个访问application环境全局信息的接口,通过它可以访问application的资源和相关的类。

创建Context实例的场景:

(1)创建Application 对象时, 而且整个App共一个Application对象

(2)创建Service对象时

(3)创建Activity对象时

Context的数量:Context数量=Activity数量+Service数量+1(Application)

获取Context的方法:

(1)View.getContext(),返回当前View对象的Context对象,通常是当前正在展示的Activity对象。

(2)Activity.getApplicationContext(),获取当前Activity所在的应用进程的Context对象,通常我们使用Context对象时,要优先考虑这个全局的进程Context。

(3)ContextWrapper.getBaseContext(),用来获取一个ContextWrapper进行装饰之前的Context,可以使用这个方法,这个方法在实际开发中使用并不多,不建议使用。

(4)Activity.this 返回当前的Activity实例,如果是UI控件需要使用Activity作为Context对象,但是默认的Toast实际上使用ApplicationContext也可以。

Context作用域:虽然Context的用途很广泛,但不是随便拿到一个Context实例就可以为所欲为,它的使用还是有一些规则限制的。在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。

5756fe14519bda442fdcb449bd4415f6.pngContext作用域

Context内存泄露问题:

(1)静态资源导致的内存泄漏。解决方案:避免使用静态资源,或者使用弱引用来解决相应。

(2)单例模式导致内存泄漏。解决方案:使用getApplicationContext(),这样使用单例与Activity就无关了,Activity释放的时候就不会出现内存泄露的问题了

寄语:人生若只如初见,何事秋风悲画扇?——纳兰容若《木兰辞·拟古决绝词柬友》

474e2c836396b158a03d686b73cb559e.png

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值