• 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 相关类的继承关系:
    image.png

    具体的实现,大家可以看一看 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这个类的源码

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

  • 相关阅读:
    队列(定义,基本操作,顺序存储,链式存储)
    医院电子病历编辑器源码(支持云端SaaS服务)
    Apache Doris 行列转换可以这样玩
    颜表情记录(自用
    pytorch实现卷积操作
    Logic Pro X10.7.9(mac乐曲制作软件)
    测试人如何打造简历化思维?
    学习笔记23--多传感器信息融合基础理论(上)
    GTX 1630参数性能如何 GTX 1630属于什么级别显卡
    HTML5七夕情人节表白网页制作【花瓣图片表白】HTML+CSS+JavaScript html生日快乐祝福网页制作
  • 原文地址:https://blog.csdn.net/duoduo_11011/article/details/128031877