Android getApplication()、getApplicationContext的区别

举报
帅次 发表于 2024/02/18 17:07:21 2024/02/18
【摘要】 ​        在Android中,getApplication()和getApplicationContext()是两种获取应用程序上下文的方法,但它们有一些细微的区别。getApplication()方法:getApplication()方法通常用于Activity或Fragment中,它返回当前Activity或Fragment所属的Application对象。这个方法只能在继承自A...

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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。