前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Context的一点理解

Context的一点理解

作者头像
饮水思源为名
发布2018-09-06 12:57:41
3530
发布2018-09-06 12:57:41
举报
文章被收录于专栏:Android小菜鸡

  Content即上下文对象,在我们android开发中随处可见,并不陌生。在加载资源、启动一个新的Activity、获取系统服务、获取内部文件(夹)路径、创建View操作时等都需要Context的参与,可见Context的常见性。大家可能会问到底什么是Context,Context字面意思上下文,或者叫做场景,也就是用户与操作系统作的一个过程,比如你打电话,场景包括电话程序对应的界面,以及隐藏在背后的数据;   但是在程序的角度Context又是什么呢?在程序的角度,我们可以有比较权威的答案,Context是个抽象类,我们可以直接通过看其类结构来说明答案:

由此我们可以看到,Application、Activity、Service都是Context的子类。

Activity和Application创建的context的区别:

  1. 他们虽然的都继承的Context类,但是Activity相对于Application多一个名为ContextThemeWrapper的父类。该类包含了主题(Theme)相关接口,即android.theme属性指定的。
  2. Application在app运行开始时创建,环绕整个app,他的context相对于Activity更持久

引用保持:

  存在这样的情况,当引用一个工具类,需要访问资源,那么就避不开context的参与。在这样的情况下就得注意Context的引用问题。   当你在工具类中传入一个Activity的Context。而我们这个工具类是一个static的强引用。那么问题就来了。也就是说这个Activity在整个程序停止运行前都无法被回收销毁。这样就成为了造成内存泄漏的风险。那么我们不用强引用,改为弱引用,是不是就可以了?答案是不行的,因为很有可能出现因为Activity被回收,导致context为null,造成NullPointException。   为了避免这种情况,我们此时就应该使用Application的Context。因为他们的生命周期是相同的。这样我们就可以避免内存泄漏的问题。

Context的应用场景:

总结:

  Context上下文对象,抽象类。是Activity、Service、Application的主类。在传递、使用context的时候,最重要的考虑应该是他的引用保持时间,避免造成内存泄漏、NullPointExcepiton等问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Activity和Application创建的context的区别:
  • 引用保持:
  • Context的应用场景:
  • 总结:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档