当前位置: 首页 > 面试经验 >

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

优质
小牛编辑
139浏览
2023-03-28

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





系列专栏:




  • 安卓系统Framework面经专栏链接:Android系统面试题解析大全

  • 安卓系统Framework面经目录详情:Android系统面经_Framework开发面经_150道面试题答案解析





  • 安卓高频面经解析大全专栏链接:Android面试题解析大全

  • 安卓高频面经解析大全目录详情:安卓面经_Android面经_150道安卓基础面试题目录





  • 嵌入式面经解析大全专栏链接:嵌入式面经_C++软件开发面经_111道面试题全解析

  • 嵌入式面经解析大全目录详情:111道嵌入式面经题全解析软件开发面经C++面经目录




本人是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元素里指定,但只在Activity界面才会使用到。


<application
android:name=".MyApplication"
...


 类似资料: