zoukankan      html  css  js  c++  java
  • 绝对让你理解Android中的Context

    这个问题是StackOverFlow上面一个热门的问题What is Context in Android?
    整理这篇文章的目的是Context确实是一个非常抽象的东西。我们在项目中随手都会用到它,但是非常多人根本不理解它究竟是干什么的,这篇文章还会加入Context in Andorid – INSIGHT的翻译,绝对让读者理解Context的意义。

    老规矩,作者提出的问题:
    在Android中,Context究竟是个什么鬼东西,它究竟是干嘛使得,我读了非常多篇文档,然而并不能清除的理解它的含义。

    答案:
    简单来说。就像它的名字(上下文)一样,他是项目当前的状态的一个标识,他能够让新创建出来,新加入进来的对象或组件知道当前项目的进度,处于一个什么状态,这样我们就能够easy理解上下文的意思了把,上文就是自己知道了之前项目已经处于一个什么样的状态,下文就是告诉后来的对象或者组件当前项目处于一个什么状态。


    你能够通过getApplication()、getContext()、getBaseContext()或者this(在当前的Activity中时)来获取context上下文。
    通常使用Context的地方:
    创建一个新的对象时:

    1.创建新的View、adapter、listener

    TextView tv = new TextView(getContext());
    ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);

    2.获取资源文件:比如 LAYOUT_INFLATER_SERVICE, SharedPreferences:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)   
    getApplicationContext().getSharedPreferences(*name*, *mode*);

    3.隐式訪问组件

    getApplicationContext().getContentResolver().query(uri, ...);
    

    假设还不明确不用操心,如今我们開始翻译Context in Andorid – INSIGHT

    Context大概是Android项目中最为经常使用的一个元素了
    每一个文档中都会有例如以下一句话:

    “An android context is an interface to global information about an application environment”
    意思是Android的context是一个沟通全局信息和程序环境的一个接口

    当我找一些介绍context的文章时,我发现少之又少。所以我将我看到的一些文章做一个整理。

    这里的接口不是java中接口interface的意思,这个接口就是连接的意思,连接两个组件。

    更准确说它是一个代表了各种环境数据的实体。

    android.content.context使resources(资源文件)、数据库、文件系统、activity、系统服务等组件之间有了能够訪问的入口。

    或者能够这样说:Context持有程序的状态、入口、权限、文件系统、等信息。而且是Activity、Service、Application等组件的父类。

    在现实世界中我们能够这样描写叙述Context:它就像一张门禁卡,通过这张门禁卡我们能够进入仓库、能够进入客厅、能够进入厨房获取我们想要的资源,这张门禁卡把几个分离的房间连接到一起了。

    一个拥有门禁卡(Context)的人(Activity)能够获得各种系统的资源。

    我们有3种方式能够获得context:

    1. mContext = getApplicationContext();
      这样的方式获得的context是全局context,整个项目的生命中期中是唯一的且一直存在的,代表了全部activities的context

    2. mContext = getContext()
      这样的方式获得的context当activity销毁时。context也会跟着销毁了

    3. mContext = getBaseContext();
      说实话我也没用过这样的方式

    何时使用getApplicationContext()或getContext()?

    通过上面的分析我们知道了两个context一个是尾随activity的生命周期一个是尾随application的生命周期的。

    因此,当你想获得一个长生命周期的context时,使用Application Context,比如当我们想要使用一个系统的服务时。这个系统服务的周期要比activity的生命周期长,假设我们使用getContext()的话,当activity销毁时,系统服务也就不能正常进行了,这时候我们就得使用getApplicationContext()

  • 相关阅读:
    yii2 分页
    yii2 钩子函数
    linux 配置compoer
    Python随心记--迭代器协议和for循环机制
    Python随心记--文件操作处理 open()
    Python随心记--练习
    Python随心记--函数式编程及常用内置函数,及部分实例
    Python随心记--匿名函数
    Python随心记--函数作用域
    Python随心记--局部变量与全局变量
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6743399.html
Copyright © 2011-2022 走看看