目录
一、介绍
在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