如何理解android 中的Context

在android开发中,使用最频繁或者说知名度最高的类非Context莫属,面试中也经常被问到。今天有时间就来学习学习一下Context到底是个什么东西。

先看api官方定义。 注释翻译:有关应用程序环境的全局信息 的接口。这是一个由Android系统提供的抽象类 。它允许访问特定于应用程序的资源和类,以及对应用程序级操作的调用,例如启动activity、广播和接收意图等 只看这生涩的文字描述定义,对于新手不太好理解,所以,我进行了如下类的关键方法抽取 这些方法基本展示了定义中所说的:访问应用应用资源,应用程序级的操作调用,启动activiy,service、广播,和意图。 只有可被继承重写的抽象方法,没有具体实现。好家伙,这不就是一个android提供的用来进行总体统筹的类么,如果没有这些方法,这Context也就成了普通不能再普通的类。类的作用就好比公司的CEO,统筹管理技术、财务、销售、公关等各个部门,如果这些管理功能部门都没有了。CEO无非也就是一名普普通通的职称。仅此而已

理解了定义中后半段的作用,我们再看类名前 abstract 关键字,是一个抽象类。意味着不能被实例化,只能被继承。那在运用过程中,势必会有个类来继承他进行context类的运用,此时ContextWrapper类就登场了。

注释翻译:Context的代理实现,只需将其所有调用委托给另一个Context。可以进行子类化以在不更改原始上下文的情况下修改行为。 一个典型的静态代理,通过mBase成员变量进行子类的方法修改。 接着查看ContextWrapper的子类实现发现主要有Application 、Activity、Service。学android最开始知道的就是android中的四大组件(Activity,Service,BroadcastReceiver,ContentProvider),既然Context是系统提供的统筹类也统筹了Brocast Receiver和Content Provider。那这两者怎么没继承ContextWrapper来进行编写呢?那是怎么拿到context的呢?查阅两类源代码发现

嗯,一个是通过onReceiver方法传入的,另一个是通过构造函数传入的context。 所以,一道经典的面试题找到了答案。# App里面有几个context? 答:应用里的context数量=Activity数量+Service数量+Application。

总结:在面试中回答这个问题时,可以先说下定义和自己的理解,然后针对继承关系加以说明加深回答印象。 注:个人学习笔记,在此记录,如有错误地方,欢迎交流指正

相关推荐
孓最求完美8 小时前
Charles 进阶抓包教程:突破 SSL Pinning、代理检测与 Flutter 抓包限制
面试
thesky1234569 小时前
智能体面试准备(九):工作流编排——DAG 与状态机两种范式的取舍与手写实现
面试·agent·状态机·工作流·智能体
Revolution6110 小时前
reactive 对象重新赋值后,表单为什么没有恢复默认值
前端·vue.js·面试
HeiSenBerg10 小时前
Android Handler 机制完全解析:从源码到内存泄漏,一篇就够了
面试
only-qi11 小时前
大模型Agent面试攻略:落地工程痛点、评估体系与Agentic RAG核心精讲
人工智能·算法·面试·职场和发展·langchain·rag
ShineWinsu12 小时前
对于Linux:传输层协议UDP原理的解析
linux·c++·面试·udp·协议·传输层·计算机系统
GitLqr12 小时前
StatefulWidget 里的隐形炸弹:为什么不要在 State 类中使用 context.mounted
flutter·面试·dart
梦想的颜色14 小时前
2026 AI Agent 工程师完整技术图谱|从面试题「什么是本体 Ontology」切入,附精选面试题库
面试·知识图谱·langgraph·aiagent·大模型面试·本体·2026 面试真题
不简说14 小时前
JS 代码技巧 vol.10 — 20 个 V8 引擎原理,解释"为什么这样写快"
前端·javascript·面试
A富得流油的咸鸭蛋16 小时前
安卓鸿蒙面试
android·面试·harmonyos