Android -- 每日一问:如何理解 Android 中的 Context,它有什么用?

Posted Kevin-Dev

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android -- 每日一问:如何理解 Android 中的 Context,它有什么用?相关的知识,希望对你有一定的参考价值。

经典回答

官方文档对于 Context 的解释:

Interface to global information about an application environment. This is an abstract class whose implementation is provided by the android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

中文翻译“Context”为“上下文,背景,环境,语境”,有点抽象。对照上面的英文,也很容易理解它的意思:Context提供了一个应用的运行环境,通过这个上下文应用才可以访问资源,才能完成和其他组件、服务的交互。它就是一个调用者和具体实现的桥接。

再看看这个图,可以直观的了解 Context 相关类的继承关系:

具体的实现,大家可以看一看 ContextImpl 这个类的源码,理一下它和 LoadApk 的关系,大家就会很容易明白 Context 是如何处理资源的。

注意:上图中的mPackageInfo是一个LoadApk对像,这个LoadApk是一个hide类型的类,所以你在SDK中是找不到它的。

Application(或者Service)和Activity都可以调用Context的startActivity方法,那么在这两个地方调用startActivity有区别吗?

如果你曾经遇到过,就会知道在Application(或者Service)需要给Intent设置Intent.FLAG_ACTIVITY_NEW_TASK才能正常启动Activity,这就会引出Activity的Task栈问题,以后再做分析。

Context的实例是什么时候创建的?一个应用里面会有几个Context的实例?

对于一般的应用来说,你会觉得这两个问题很无聊。但如果你需要做插件开发,上面的问题就变成是很关键的问题了。你的插件框架会是一个小型的Android Framework层,你当然得自己处理插件的Application和Activity创建,那么你肯定要解决好这两个问题。详情可以查看ActivityThread这个类的源码

你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。

以上是关于Android -- 每日一问:如何理解 Android 中的 Context,它有什么用?的主要内容,如果未能解决你的问题,请参考以下文章

Android -- 每日一问:如何理解 Gradle?Gradle 在 Android 的构建过程中有什么作用?

Android -- 每日一问:两个 Fragment 之间如何进行通信 ?

Android -- 每日一问:怎么理解 Activity 的生命周期?

Android -- 每日一问:如何检测内存泄露,如何进行内存优化?

Android -- 每日一问:如何检测内存泄露,如何进行内存优化?

Android -- 每日一问:两个 Activity 之间如何传递参数?