什么是ActivityCompat,我们在哪里以及如何使用它?

3

目前,我正在学习Android开发,在学习过程中遇到了很多问题,例如传递“this”上下文、ActivityCompat和ContextCompat。什么是ActivityCompat?我们应该在哪里、如何使用它?我尝试阅读了相关的文档,但由于我是Android新手,无法理解文档中的写作方式。

另外,在Android中,什么是上下文参数,它的作用是什么,如何使用它?当方法中要求上下文时,通常会将“this”关键字传递给它。您能否用易于理解的语言解释一下?


我无法理解文档中的写法。很多文档仅靠阅读是无法理解的,不幸的是,你需要做什么?你为什么对这个类感兴趣? - a_local_nobody
@a_local_nobody,我对这些类很感兴趣,因为我正在学习Android开发。在观看教程时,我遇到了类ActivityCompat和ContextCompat,因为它们在代码中经常被使用。但是在教程中,并没有提及这些类的用途和使用方法。那么这些类是用来做什么的呢?实际上,ActivityCompat和ContextCompat是用于向用户请求权限时编写代码时所需的类。 - ADITYA RAJ
我知道你正在学习,所以我想问你在哪里找到或看到它的资料。有时候你并不需要完全理解一个类,只需要知道一个特定方法是做什么的即可。有时候找到一个类的文档比找出一个方法是做什么的还要难。 - a_local_nobody
1个回答

3

ActivityCompat是一个仅有静态成员的Java类(类似于Kotlin中的object)。这意味着您不需要实例化它。它只提供帮助函数。

ActivityCompat专门为某些在不同Android版本上使用不同功能时可以使用的常规Activity中的一些功能提供替代方案。

例如,Android 9(SDK 28)显然略微修改了调用Activity.recreate()时发生的详细信息。如果您的minSdkVersion设置低于28,则可能希望确保即使在运行旧版Android的设备上也具有相同的行为。为此,在您的Activity中,您将调用ActivityCompat.recreate(this)而不是调用recreate()

库中还有其他类似于此类的“Compat”类,例如ViewCompat、WindowCompat和WindowInsetsCompat。

不要将ActivityCompatAppCompatActivity混淆,后者是您通常会子类化以创建自己的Activity的类。


你的意思是这些只是现有类的高级版本,根据SDK版本处理兼容性问题吗? - ADITYA RAJ
1
不,ActivityCompat 不是一个 Activity。它是一个包含有关如何使用 Activity 的帮助程序函数的容器。如果 Jetpack 库用 Kotlin 编写,它根本不存在——他们将这些函数编写为扩展函数。但是在 Java 中,函数必须放在类中,因此他们把它们放在了一个名为 ActivityCompat 的东西中。不要将 ActivityCompat 与 AppCompatActivity 混淆,后者是你通常会派生创建自己的 Activities 所用的类。非常令人困惑,我知道。 - Tenfour04
好的,我明白了。你能否解释一下什么是上下文,并且为什么在方法有上下文参数时经常会传递'this'关键字?据我所知,'this'用于引用类的当前实例。你能否用一些真实的例子以易于理解的语言来解释它? - ADITYA RAJ
在这里详细解释了:https://dev59.com/lnA65IYBdhLWcg3w5zDB 由于 Activity 是 Context 的子类,如果你编写的代码是在 Activity 类内部的话,可以将 this 作为上下文参数传递。但是在 Fragment 中,这样做是行不通的,因为 Fragment 不是 Context 的子类。这是一个令人困惑的主题,很多人认为 Context/Activity/Fragment 的实现是一个相当大的设计失误。 - Tenfour04

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接