• 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这个类的源码

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

  • 相关阅读:
    mac显示器如何显示docker container中的gui请求
    Vue3<script setup>语法糖下,实现父子组件通信以及数据监听的三种方法。
    0501 货仓选址 【中位数 距离和的最小值】
    ES6新增的 Symbol
    Flutter入门到精通:学习路线与思路
    docker file实战并将springBoot项目打包成镜像并运行
    C语言 深度探究C语言中的函数
    验证二叉搜索树
    MySQL(子查询)
    misc学习(4)Traffic(流量分析)-心仪的公司
  • 原文地址:https://blog.csdn.net/duoduo_11011/article/details/128031877