• 常见面试第二题之什么是Context


    今天的面试题。也就是我们常见面试题系列的第二题,我们来讲一讲android中的context。我相信大家android开发人员一定对于这个context很熟悉,肯定都有使用过,肯定没有没使用过的。可是这个context是什么呢?有多少人能理解呢?我们上一个题讲的是listview,这个也是很常见的。今天的context也是很常见的。所以面试题事实上离我们很近的,一定都是经常使用的才会问题,很少有公司面试一些很偏僻的,不用的东西,在开发中没用面试什么啊?对吧,好了,有点扯多了,我们从茄子地里回来,接着讲这个context。


    1、什么是context?

    这个在我们开发中最熟悉而又陌生的朋友究竟是什么呢?可能大家会不约而同的说。是场景,是上下文,可是究竟有多少人理解这个原理呢?我简单概括一下。应该有下面几点:

    、它描写叙述的是一个应用程序环境的信息。即上下文。

    、该类是一个抽象(abstract class)类。Android提供了该抽象类的详细实现类。

    、通过它我们能够获取应用程序的资源和类,也包含一些应用级别操作,比如:启动一个Activity,发送广播,接受Intent信息等。

    说了这三点好像你还有点模糊,那我就总结来说。

    总结就是:Context是一个抽象基类。我们通过它訪问当前包的资源(getResources、getAssets)和启动其它组件(Activity、Service、Broadcast)以及得到各种服务(getSystemService),当然,通过Context能得到的不仅仅仅仅有上述这些内容。

    对Context的理解能够来说:Context提供了一个应用的执行环境。在Context的大环境里,应用才干够訪问资源,才干完毕和其它组件、服务的交互。Context定义了一套主要的功能接口,我们能够理解为一套规范,而Activity和Service是实现这套规范的子类。这么说或许并不准确,由于这套规范实际是被ContextImpl类统一实现的,Activity和Service仅仅是继承并有选择性地重写了某些规范的实现。


    2、我们来看一下context的相关类的继承关系


    通过图上我们能够看出:Activity类 、Service类 、Application类本质上都是Context子类,知道为什么老是在这些里面用到context了吧?


    3、Application、Activity和Service作为Context的差别

    同样点:它们都间接继承了Context。

    不同点:首先看它们的继承关系,通过对照能够清晰地发现,Service和Application的类继承关系比較像,而Activity还多了一层继承ContextThemeWrapper,这是由于Activity有主题的概念。而Service是没有界面的服务,Application更是一个抽象的东西。它也是通过Activity类呈现的。Context的真正实现都在ContextImpl中,也就是说Context的大部分方法调用都会转到ContextImpl中。而三者的创建均在ActivityThread中完毕,Activity启动的核心过程是在ActivityThread中完毕的,这里要说明的是。Application和Service的创建也是在ActivityThread中完毕的。


    4、一个应用程序中有多少个context?

    一个应用程序中究竟有多少个context?这个问题就是我们面试中最常见的,也是常常被问到的,看完以上三点的分析?你知道有多少个了吗?

    答案显而易见:总Context实例个数 = Service个数 + Activity个数 + 1(Application相应的Context实例)

    讲到这里我相信大家应该有所理解了吧?实在没理解的抽出时间去查一下源代码分析一下。深刻的理解一下。了解了我上边所说的那些内容之后,你在面试中遇到相关context的问题,基本上没问题了。

    说完了两道题之后。有没有特别想期待第三题呢?


    个人组织了一个高端Android微信交流群,有意向的能够先分享此文章到朋友圈,再加我微信,发送分享到朋友圈的截图给我。我把你拉进去。保你学到很多其它知识。能够第一时间收到干货推送。


    微信号:smart_android (←长按复制)

    介绍:非著名程序猿。字耿左直右,号涩郎,爱搞机,爱编程,是爬行在移动互联网中的一名码匠!

    个人微信号:loonggg

    微博:涩郎

    QQ群:413589216 很多其它资料和源代码尽在QQ群文件

    今日头条:搜索“非著名程序猿”订阅很多其它信息

    工作:专注于移动互联网的开发和研究。本号致力于分享IT技术和程序员工作心得体会。欢迎大家关注与转载。


  • 相关阅读:
    图文并茂记录下重新配置Win10系统Flutter环境--内含Android Studio 下载安装教程
    图文并茂解决Client does not support authentication protocol requested by server; consider upgrading MySQL
    图文并茂基于阿里云linux服务器部署nodejs项目并添加pm2守护nodejs项目运行进程(Linux version 4.19.81-17.1.al7.x86_64)
    超简单的图文并茂Linux上使用yum安装Mysql(Aliyun Linux release 2.1903 LTS)
    使用linux命令直接在网上下载文件,解压,改名
    解决使用linux部署nodejs服务测试代码返回中文是乱码
    Echarts点击多组数据多个柱子中的一个柱子,获取当前点击的是第几组数据,并获取点击的是当前组别第几根柱子,以及对应横坐标,
    flutter 2.X报错 Bad state: Insecure HTTP is not allowed by platform:
    flutter 2.x运行flutter run 报错Cannot run with sound null safety, because the following dependenciesdon'
    flutter 1.升级2.X在模型类中序列化JSON报错Non-nullable instance field 'title' must be initialized.
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6933671.html
Copyright © 2020-2023  润新知