当前位置: 首页 > news >正文

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。

http://www.lryc.cn/news/452229.html

相关文章:

  • 数字解调同步技术
  • k8s搭建一主三从的mysql8集群---无坑
  • Oracle架构之物理存储中各种文件详解
  • AR 领域的突破——微型化显示屏为主流 AR 眼镜铺平道路
  • Web安全 - 构建全面的业务安全保护防御体系
  • 机器学习(2):机器学习的相关术语
  • Leecode热题100-75.颜色分类
  • 408算法题leetcode--第22天
  • dubbo微服务
  • 如何在 DAX 中计算多个周期的移动平均线
  • 微信小程序 图片的上传
  • 软件测试人员发现更多程序bug
  • Nagle 算法:优化 TCP 网络中小数据包的传输
  • C#入门教程
  • 【MySQL报错】---Data truncated for column ‘age‘ at row...
  • Go基础学习08-并发安全型类型-通道(chan)深入研究
  • some 蓝桥杯题
  • [linux 驱动]input输入子系统详解与实战
  • 2023_Spark_实验十:Centos_Spark Local模式部署
  • pyecharts-快速入门
  • vue3打包疯狂报错
  • STM32 软件触发ADC采集
  • Android SystemUI组件(08)睡眠灭屏 锁屏处理流程
  • C# 表达式与运算符
  • SpringBoot--最大连接数和最大并发数
  • CF687D Dividing Kingdom II 题解
  • 高空抛物AI检测算法:精准防控,技术革新守护城市安全
  • html+css+js实现Collapse 折叠面板
  • RM服务器研究(一)
  • 云岚到家xxl job 配置