Context的一点理解

  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等问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏漏斗社区

天空飘来五字:Android逆向smali

本期,我们将继续Android逆向动态分析之smali篇。内容包括smali语言介绍与动态调试。

13320
来自专栏Android机动车

Retrofit实现带进度下载

Retrofit是目前最主流的网络框架了,它对网络请求几近完美的封装,大大降低了我们开发者的研发难度,缩短了研发周期。最近项目中遇到了下载视频和图片文件的需求(...

12820
来自专栏LeoXu的博客

[翻译]Android教程-保存数据-保存键值对

http://developer.android.com/training/basics/data-storage/index.html

13110
来自专栏三流程序员的挣扎

Navigation 详解一

Navigation 是 JetPack 中的一个组件,用于方便的实现页面的导航,所以抽象出了一个 destination 的概念,大部分情况一个 destin...

23410
来自专栏CSDN技术头条

内存泄漏的检测、解决、防止

引言 今天又是没什么事情,好,不多说,直接进入我们的主题吧。 今天说的是关于内存泄漏的检测与解决。这个问题想必对于初学者是个迷,也不知道从何出入手,那么今天这个...

341100
来自专栏james大数据架构

android防止内存溢出浅析

Android的虚拟机是基于寄存器的Dalvik,它的最大堆大小一般是16M。但是Android采用的是Java语言编写,所以在很大程度上,Android的内存...

19150
来自专栏向治洪

Android Remote Views

听名字就可以看出,remote views是一种远程view,感觉有点像远程service,其实remote views是view的一个结构,他可以在其他的进程...

20470
来自专栏酷玩时刻

统一管理项目中的接口回调

无论是 Java Web 开发还是 Android 开发我们都避免不了异步处理业务的逻辑。有异步的出现一定就有异步结果(接口)的回调。你之前是不是有为每一个异步...

9740
来自专栏QQ音乐技术团队的专栏

记一次全民K歌的crash定位过程

全民K歌4.6版本发布后,出现了一个与RecyclerView相关的Bug,作此记录。

41630
来自专栏Android开发小工

在Android开发中怎样使用Application类

自己独立开发项目才发现以前对Application类并不是十分了解,现在开始直接搭建一个新项目的框架才重新踩过这个坑。

14350

扫码关注云+社区

领取腾讯云代金券