Android getApplication()、getApplicationContext的区别

        在Android中,getApplication()getApplicationContext()是两种获取应用程序上下文的方法,但它们有一些细微的区别。

getApplication()方法

  • getApplication()方法通常用于Activity或Fragment中,它返回当前Activity或Fragment所属的Application对象。
  • 这个方法只能在继承自Application类的自定义应用程序类中使用,因为它是从Application类继承而来的。
  • 通常用于获取应用程序级别的变量或配置,例如全局变量、应用程序配置等。

getApplicationContext()方法:

  • getApplicationContext()方法是Context类的方法,返回整个应用程序级别的上下文。
  • 这个方法可以在任何继承自Context的类中调用,比如Activity、Service、BroadcastReceiver等。
  • 用于获取应用程序级别的上下文,可以用于访问应用程序级别的资源和变量
Context appContext = getApplicationContext();

主要的区别(Activity调用该方法)

class MainActivity : AppCompatActivity() {

    private lateinit var appBarConfiguration: AppBarConfiguration
    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        Log.e("MainActivity", "application:$application")
        Log.e("MainActivity", "applicationContext:$applicationContext")

    }
}

        在 Activity 调用 getApplication()方法,这个是源码,位于Activity.java

public class Activity extends ContextThemeWrapper
        implements LayoutInflater.Factory2,
        Window.Callback, KeyEvent.Callback,
        ......
{
    private static final String TAG = "Activity";
    /** Return the application that owns this activity. */
    public final Application getApplication() {
        return mApplication;
    }
    ......
}

        在 Activity 调用 getApplicationContext()方法,这个是源码,位于

public class ContextWrapper extends Context {
    @UnsupportedAppUsage
    Context mBase;

    public ContextWrapper(Context base) {
        mBase = base;
    }
    @Override
    public Context getApplicationContext() {
        return mBase.getApplicationContext();
    }
    ......
}

        输出,都是Application对象

    getApplication()返回的是当前Activity或Fragment所属的Application对象。 

    getApplicationContext()返回的是整个应用程序级别的上下文。

        通常来说,如果需要访问全局应用程序级别的变量或配置,可以使用getApplication()方法;如果需要一个通用的应用程序级别的上下文,可以使用getApplicationContext()方法。

        但需要注意的是,使用这些方法要谨慎,确保不会引起内存泄漏或意外的上下文引用,特别是在长时间运行的异步任务中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/300895.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习:解决CNN的困境——胶囊网络

从2017年底到2018年初,整个人工智能学术研究领域谈论最多的应该就是被誉为深度学习之父Geoffrey E. Hinton 发表的论文 Dynamic Routing Between Capsules,其中介绍了全新的深度学习模型——胶囊网络(Capsule Network) 1. 普通CNN的困境 虽…

电子学会C/C++编程等级考试2023年12月(三级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:因子问题 任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。 时间限制:10000 内存限制:65536 输入 包括两个整数N、M。N不超过1,000,000。 输出 输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存…

YOLOv5改进 | 主干篇 | CSWinTransformer交叉形窗口网络改进特征融合层

一、本文介绍 本文给大家带来的改进机制是CSWin Transformer,其基于Transformer架构,创新性地引入了交叉形窗口自注意力机制,用于有效地并行处理图像的水平和垂直条带,形成交叉形窗口以提高计算效率。它还提出了局部增强位置编码(LePE),更好地处理局部位置信息,我将其…

新手练习项目 5:简易计算器(C++)

名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder) 目录 一、效果图二、代码(带注释)三、说明 一、效果图 二、代码(带…

【Spring实战】26 使用Spring Security 保护 Spring Boot Admin

文章目录 1. 定义1.集成流程1)添加 Spring Boot Admin 依赖2)配置 Spring Boot Admin3)启动 Spring Boot Admin 服务4)访问 Spring Boot Admin 服务5)添加 Spring Security 依赖6)配置 Spring Security7&am…

计算机网络实验(二):Wireshark网络协议分析

一、实验名称:Wireshark网络协议分析 二、实验原理 HTTP协议分析 1.超文本传输协议(Hypertext Transfer Protocol, HTTP)是万维网(World Wide Web)的传输机制,允许浏览器通过连接Web服务器浏览网页。目…

CAN物理层协议介绍

目录 ​编辑 1. CAN协议简介 2. CAN物理层 3. 通讯节点 4. 差分信号 5. CAN协议中的差分信号 1. CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519) &#xff0…

求更新后的路由表

假定网络中的路由器B的路由表有如下的项目 (这三列分别表示“目的网络“距离”和“下一跳路由器”): 现在B收到从C发来的路由信息(这两列分别表示“目的网络”和“距离”): 试求出路由器B更新后的路由表(详细说明每一个步骤)。 (1)首先把收到的路由信息的"距离"1: …

【AI视野·今日NLP 自然语言处理论文速览 第七十一期】Fri, 5 Jan 2024

AI视野今日CS.NLP 自然语言处理论文速览 Fri, 5 Jan 2024 Totally 28 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers LLaMA Pro: Progressive LLaMA with Block Expansion Authors Chengyue Wu, Yukang Gan, Yixiao Ge, Zeyu Lu, …

Fowsniff

靶场搭建 遇到扫描不到的情况,可以尝试改靶机的网络为NAT模式,在靶机启动时按”esc“,进入Advanced options for Ubantu,选择recovery mode,选择network,按方向键”→“,OK,然后res…

JVM工作原理与实战(九):类加载器-启动类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、启动类加载器 二、通过启动类加载器去加载用户jar包 1.放入jre/lib目录进行扩展 2.使用参数进行扩展 总结 前言 JVM作为Java程序的运行环境,其负责解释和执行字节码…

基于 STM32 的 MPU6050 姿态计算方法及应用

基于STM32的MPU6050姿态计算方法可以通过融合陀螺仪和加速度计的数据来实现。在本文中,我们将介绍通过MPU6050获取姿态数据,并结合姿态解算算法实现姿态估计的方法,并提供相应的代码示例。 1. 硬件连接及库配置 首先,我们需要将…

算法第十三天-解码方法

解码方法 题目要求 解题思路 来自【宫水三叶】 基本分析 我们称一个解码内容为一个item。 根据题意,每个item可以由一个数字组成,也可以由两个数字组成。 数据范围为100,很具有迷惑性,可能会有不少同学会想使用DFS进行暴力搜索…

当大型语言模型(LLM)遇上知识图谱:两大技术优势互补

1 引言 大型语言模型(LLM)已经很强了,但还可以更强。通过结合知识图谱,LLM 有望解决缺乏事实知识、幻觉和可解释性等诸多问题;而反过来 LLM 也能助益知识图谱,让其具备强大的文本和语言理解能力。而如果能…

2024--Django平台开发-Web框架和Django基础(二)---Mysql多版本共存(Mac系统)

MySQL多版本共存(Mac系统) 想要在Mac系统上同时安装【MySQL5.7 】【MySQL8.0】版本,需要进行如下的操作和配置。 想要同时安装两个版本可以采取如下方案: 方案1:【讲解】 MySQL57,用安装包进行安装。 MyS…

Python 自学(五) 之字符串及正则表达式

目录 1. 字符串的分割合并 split() join() P132 2. 字符串的检索 count() find() index() startswith() endswith() P134 3. 去除空格和特殊字符 strip() lstrip() rstrip() P139 4. 格式化字符串 format() P142 5. 字符串编码…

js逆向第13例:猿人学第6题js混淆-回溯赛

文章目录 m是加密字符串怎么来的?浏览器环境检测本地运行的js代码任务六:采集全部5页的彩票数据,计算全部中奖的总金额(包含一、二、三等奖) 此题总体难度低于第5题,老规矩还是查看控制台请求地址https://match.yuanrenxue.cn/api/match/6?m=rPRDgpbV3Wd%252FyPfURQAkxK…

数脉观察二丨 详解CroPoolv2.0锁仓收益机制 文末附锁仓教程

1月1日元旦佳节期间,CyberVein基金会支持打造的CroPoolv2.0最新版本正式上线,获得了圈内媒体和知名KOL多方的关注,在Staking领域掀起了热议,用户可以前往CroPool.net进行锁仓体验。 CroPool v2.0新增“锁仓”功能板块&#xff0c…

目标检测-One Stage-YOLOv4

文章目录 前言一、目标检测网络组成二、BoF(Bag of Freebies)1. 数据增强2.语义分布偏差问题3.损失函数IoUGIoUDIoUCIoU 三、BoS(Bag of Specials)增强感受野注意力机制特征融合激活函数后处理 四、YOLO v4的网络结构和创新点1.缓解过拟合(Bo…

关于目标检测中按照比例将数据集随机划分成训练集和测试集

1. 前言 在做目标检测任务的时候,不少网上的数据,没有划分数据集,只是将数据和标签放在不同的文件夹下,没有划分数据集 虽然代码简单,每次重新编写还是颇为麻烦,这里记录一下 如下,有的数据集…