Android getApplication()、getApplicationContext的区别

本文详细介绍了Android中获取应用程序上下文的两种方法:getApplication()和getApplicationContext()的区别。这两种方法分别用于获取当前Activity或Fragment所属的Application对象及整个应用程序级别的上下文。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、介绍

二、getApplication()方法

三、getApplicationContext()方法

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

精彩推荐 


一、介绍

        在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()方法。

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

精彩推荐 

adb 常用命令汇总文章浏览阅读8.4k次,点赞24次,收藏75次。Android Debug Bridge (ADB) 是一个多功能命令行工具,它允许你与连接的Android设备进行通信。ADB主要用于调试和与设备进行各种交互,如安装和调试应用、访问设备的shell、复制文件等。它包含在Android SDK中,并且是Android开发者的重要工具之一。_adb命令https://shuaici.blog.csdn.net/article/details/135509740全架构设计理论与实践文章浏览阅读1k次,点赞15次,收藏16次。在信息系统的整个生命周期中,安全保障应包括技术、管理、人员和工程过程的整体安全,以及相关组织机构的健全等。目前,网络与信息安全风险类别可以分为人为蓄意破坏(被动型攻击,主动型攻击)、灾害性攻击、系统故障、人员无意识行为https://shuaici.blog.csdn.net/article/details/140847010

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅次

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值