Android Context是什么?有很多的context他们之间有什么区别?什么时候该使用哪个?

目录

1. Context是什么?
2. Context的关系
3. 源码分析
4. Application、Activity、Service的Context的区别、内存泄漏问题


一、Context是什么?

在Android中,Context是一个抽象类 ,它代表了应用程序的当前状态,包括资源和类加载器等,它提供了一个应用运行所需的信息,比如我们要获取资源 ,那么需要她,启动Activity,获取系统服务等,都会需要它。

Context允许应用程序访问系统的资源和接口,以及执行与应用程序环境相关的操作。它是连接应用程序与Android系统之间的桥梁。所以我们Activity、Application都继承了它。

可以理解为它应用赖以生存的运行环境。


二、Context的关系

在这里插入图片描述

  1. Context是一个抽象类
  2. ContextImpl是实现了Context,提供了具体的功能,
  3. ContextWrapper没有提供特殊的,只是包含了context,主要是ContextImpl
  4. ContextThemeWrapper多了一个主题。 Activity的父亲是ContextThemeWrapper,它提供了对主题资源的访问功能,因为只有Activity涉及到UI显示。
  5. Activity、Application、Service可以直接拿到到Context,本身就是Context

三、Context源码分析

我们可以看看源码。

在这里插入图片描述Context是一个抽象类
在这里插入图片描述ContextWrapper里面封装了ContextImpl

在这里插入图片描述
ContextImpl里面就实现了很多功能。

我们看看Activity

在这里插入图片描述在这里插入图片描述
可以看到Activity本身就是一个Context,所以我们可以直接使用this,就可以代表context。


四、Application、Activity、Service的Context的区别、内存泄漏问题

生命周期:

● Application的context:与Application的生命周期相关,context随着Application的销毁而销毁,伴随application的一生,与activity的生命周期无关。
● Activity的context:与Activity的生命周期相关,Activity可以销毁多次,那么属于Activity的context也会销毁多次。

内存泄漏

● Application的context:引用Application的context不会导致内存泄漏,因为它的生命周期与整个应用程序的生命周期一致。
● Activity的context:引用Activity的context可能会导致内存泄漏,特别是当引用对象的生命周期超过了当前Activity的生命周期时。

资源访问:

● Application的context:通常用于访问应用程序级别的资源,如全局变量、应用主题、资源文件中的内容等。
● Activity的context:通常用于访问与当前Activity相关的资源,如启动新的Activity、加载布局文件、创建对话框等。

所以,
● 在一个应用程序中,context的数量并不是固定的,它取决于应用程序中Activity、Service和Application的数量。
● 对于单进程应用程序来说,通常只有一个Application实例,因此只有一个Application的context。但是,如果有多个Activity和Service,那么就会有多个对应的context。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前期后期

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值