安卓面经_安卓基础面全解析(5/30)Context全解析

牛客高级系列专栏:

安卓(安卓系统开发也要掌握)


嵌入式


本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人对常见安卓高频开发面试题的理解;

网上安卓资料千千万,笔者将继续维护专栏,一杯奶茶价格不止提供答案解析,承诺提供专栏内容免费技术答疑,直接咨询即可。助您提高安卓面试准备效率,为您面试保驾护航!

正文开始⬇

俗话说得好,Context都没弄明白,怎么做Android开发。面试官可能会问:

  1. 谈谈你对Activity的Context的认识?⭐⭐⭐⭐⭐
  2. Application和Activity,Context的区别?⭐⭐⭐⭐⭐
  3. getApplication()和getApplicationContext()的区别?⭐⭐⭐⭐
  4. context错误用法有哪些?⭐⭐⭐
  5. 如何正确使用Context?⭐⭐⭐⭐

看完以下的解析,一定可以让面试官眼前一亮。

目录

  • 1、什么是Context,能干什么?
  • 2、一个应用程序有几个Context?
  • 3、如何获取Context
  • 4、Context的错误用法和正确使用方法
    • 4.1 错误使用静态方法
    • 4.2 错误使用静态View对象
    • 4.3 如何正确使用Context

1、 什么是Context,能干什么?

Context直译过来是“语境”,“上下文”,“环境”的意思。以前在学习嵌入式Linux的时候,也经常说到进程上下文,中断上下文。而在“安卓上下文”中,我们需要先明白安卓的应用模型是基于组件的应用设计模式,比如Activity和Service这些组件在运行的时候,都需要一个完整的Android工程环境。那么在代码里,这个“环境”由谁提供?那自然就是Context类。 作为Android代码里出镜率最高的Context,除了负责四大组件的交互场景外,还有很多的场景都需要用到Context,如:

  • 获取系统属性,系统资源(color、string、drawable等)场景;
  • 数据存储场景,如使用文件,SharedPreference,数据库的场景;

我们来看看源码里Context类系列: 图片说明

Context如下代码,本身是一个纯abstract类,那么自然有对应的实现子类:ContextImpl和ContextWrapper,其中ContextImpl是Context真正的实现类,ContextWrapper类则和其名字一样,只是一个封装类,并沒有真正的实现,真正的实现是其包含了一个mBase变量,是通过attachBaseContext() 方法来设置的,本质上是 ContextImpl对象。

public abstract class Context {
    /**
     * File creation mode: the default mode, where the created file can only
     * be accessed by the calling application (or all applications sharing the
     * same user ID).
     * @see #MODE_WORLD_READABLE
     * @see #MODE_WORLD_WRITEABLE
     */
    public static final int MODE_PRIVATE = 0x0000;

    ...
    }

接着,ContextThemeWrapper又是继承于ContextWrapper,正如其名,ContextThemeWrapper相对于ContextWrapper多包含了与主题(Theme)相关的接口,这个主题就是AndroidManitest.xml里面application元素或者Activity元素通过android:theme指定的主题。如下面的theme,虽然在application元素里指定,但只在A

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Android高频面试题全解析 文章被收录于专栏

#提供免费售后答疑!!花一杯奶茶的钱获得安卓面试答疑服务,稳赚不赔# Android发展已经很多年,安卓资料网上千千万,本专栏免费提供专栏内容技术答疑!!私聊当天必回。在阅读过程或者其他安卓学习过程有疑问,都非常欢迎私聊交流。

全部评论
4.2里的“静态的mDrawable会一直持有非静态ImageView对象所在的activity引用”这点有点不太理解,为啥会反过来是静态drawable持有activity的引用啊??
2 回复 分享
发布于 2024-01-12 20:10 北京
看来你的分享,瞬间觉得技术是需要下功夫学习的啊
1 回复 分享
发布于 2022-10-05 18:27 山西

相关推荐

不愿透露姓名的神秘牛友
07-11 15:37
点赞 评论 收藏
分享
07-01 23:23
郑州大学 Java
否极泰来来来来:牛客迟早有高三的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
6
30
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务