Android中Context概述

一 概念

Context,上下文,可以获取应用的资源和信息。Context在加载资源、启动Activity、获取系统服务、创建View等操作都要参与。它提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。有两个子类,其中ContextImpl是具体实现类,而ContextWrapper是包装类。Application、Activity、Service直接或间接继承ContextWrapper,其中Activity有主题,继承的是ContextThemeWrapper。
因此,一个引用Context的数量=Activity+Service+1(Application)。至于其他两个组件,它们的Context都是其他地方传过去的。
以前看过一篇文章里面有一句话,我觉得挺好的。意思差不多是虽然Activity继承Context,但是更像代理了Context,而Context拥有权力,Activity通过权力从而可以做很多事情。

二 使用

  • View.getContext
    获取的是当前Activity的Context
  • Activity.getApplicationContext
  • Activity.this

三 注意事项

凡是与ui相关的,都应该用Activity的Context。也要注意Context的持有,防止内存泄漏。

  • 优先使用Application的Context
  • 不要让长生命周期对象持有Activity对象引用
  • 尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。

注意不要在init里面使用Context哈。

相关推荐

  1. AndroidContext概述

    2024-07-18 05:42:06       20 阅读
  2. golangcontext详解

    2024-07-18 05:42:06       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 05:42:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 05:42:06       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 05:42:06       58 阅读
  4. Python语言-面向对象

    2024-07-18 05:42:06       69 阅读

热门阅读

  1. 数据库管理-第221期 Oracle的高可用-04(20240717)

    2024-07-18 05:42:06       21 阅读
  2. 构建自动化:在Gradle中配置项目变量

    2024-07-18 05:42:06       21 阅读
  3. PL/SQL oracle上多表关联的一些记录

    2024-07-18 05:42:06       23 阅读
  4. vb6读取mysql,用odbc mysql 5.3版本驱动

    2024-07-18 05:42:06       19 阅读
  5. 在Spring Boot 中使用Kafka

    2024-07-18 05:42:06       23 阅读
  6. 响应式编程:Project Reactor与WebFlux

    2024-07-18 05:42:06       20 阅读
  7. Django+vue自动化测试平台(28)-- ADB获取设备信息

    2024-07-18 05:42:06       23 阅读
  8. 2024牛客暑期多校训练营1 I.Mirror Maze(题解)

    2024-07-18 05:42:06       21 阅读
  9. 浅谈Git

    浅谈Git

    2024-07-18 05:42:06      21 阅读