java - makeText 方法,何时使用此方法以及何时使用 getBaseContext()

标签 java android

大家好,我在理解上下文并在 makeText 中使用它时遇到问题

我在这个网站上看到了很多问题,并阅读了 Android 文档中的上下文并在 makeText 方法中使用它。但我仍然不明白很多东西:

  • Activity 和上下文之间有什么区别? *
  • 上下文是否意味着当前类?
  • 为什么我不能使用 this 而不是 getBaseContext ?
  • getBaseContext 和 getApplicationContext 之间有什么区别?

*我读到 Activity 是上下文的一部分,但为什么我们不能在 makeText 方法的第一个参数中使用 MainActivity.class 以及为什么此方法需要上下文

抱歉问了这么长的问题,但我真的无法理解(上下文)

最佳答案

Activity 和上下文之间有什么区别?

正如您在 Android reference 中看到的那样,Activity是Context的间接子类。 ( Activity 扩展上下文)。从本质上讲,这意味着 Activity 是“上下文”,因此使用 this 来获取 Activity 中的上下文。

上下文是否意味着当前类?

不完全是。上下文实际上就是应用程序的上下文。它与应用程序的当前状态有关。

来自docs

It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.

为什么我不能使用 this 而不是 getBaseContext ?

如果您在 Activity 中,则可以使用 this 来引用当前 Context,因为 Activity 扩展了 context。

请注意,如果您位于内部类中,例如 onClickListener,则必须使用 YourActivity.this 而不是 this ,引用上下文。

getBaseContext 和 getApplicationContext 之间有什么区别?

顾名思义,getApplicationContext() 返回引用整个应用程序的上下文,并且在应用程序的任何生命周期更改中都将保持不变。

getBaseContext() 有点奇怪。您可以使用它从另一个上下文内部访问上下文,如 this answer 中详述。

出于您的目的(在 Toast.makeText() 中?),使用 YourActivity.this 应该可以正常工作。

关于java - makeText 方法,何时使用此方法以及何时使用 getBaseContext(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33602066/

相关文章:

java - 跨编程语言的动态内存分配

java - 从通知更改选项卡的 Intent

android - 如何观察协程流的 ContentProvider 变化

java - 使用 CPLEX 将成本函数内的多个元素相乘

java - Maven打包后出错

java - 高级 Eclipse Java 搜索

java - 如何将 Eclipse 项目的 "Java Build Path"部分中引用的 jar 包含在使用 build.xml 文件通过 Ant 生成的 jar 文件中

android - 如何检测 Android 设备(例如 Nexus Galaxy)上的 USB 大容量存储支持?

java - 无法更新 fragment 中 onActivityResult 的 View

android - 如何在不支付真钱的情况下测试应用内购买