【问题标题】:using "this" keyword for context parameter in android programming [duplicate]在android编程中使用“this”关键字作为上下文参数[重复]
【发布时间】:2016-12-09 09:01:09
【问题描述】:

我已经阅读了What is context on android,但我仍然不清楚以下问题:
每当我在任何构造函数中遇到“context”参数时,我都会传递“ this" 关键字自动而无需思考。这总是正确的方法吗?

  1. 如果是:这意味着“this”关键字是“context”要求的唯一答案。那么这个无用的问题是什么?
  2. 如果不是:在哪些情况下,当构造函数请求“context”时,可能会传递哪些其他对象?
    如果是这样,请原谅我的愚蠢问题。我是 android 编程的初学者并试图了解基本概念。

【问题讨论】:

  • 如果片段中需要上下文,请使用getContext(),如果您的类正在扩展任何活动,那么您可以传递this。
  • @abbath 我已经阅读了link,但我没有找到答案。我现在想总是或有时使用this关键字吗?

标签: android this android-context


【解决方案1】:

这意味着“this”关键字是“context”的唯一答案 要求。那么这个无用的问题是什么?

this 指的是 this 对象。它适用于您的情况,因为您从Service 的Activity 继承自ContextWrapper 的子类

如果不是:在什么情况下,什么其他对象可能通过 构造函数要求“上下文”?

片段是一个例子 - 但它有方法 getActivity() 来检索托管活动

【讨论】:

    【解决方案2】:

    否

    这个关键字代表当前的类。

    Context是android组件,在JAVA核心中是找不到的。 this 关键字是 JAVA 的核心部分,它意味着 'this 和 Context' 是不同的东西。 实际上,如果您要扩展 Context 的任何子类,如 Activity、AppCompactActivity 或 FragmentActivity 等。您可以使用 'this' 关键字为 Context 分配,但不能在任何地方分配。

    【讨论】:

    • 表示当前类的当前实例!
    • 对,'this'代表当前的类实例。如果您要扩展 Context 或 Context 本身的任何子类,则可以在该类中使用“this”关键字将其分配给 Context。
    • 为什么 android 要求上下文?它不能识别该方法在哪个上下文中运行吗?
    • @BehzadHakimian:对于这个问题,我将用 2 个案例来解释:案例 1:如果您在 Context 的子类中编写与 Context 相关的代码。 i> 那么就不需要使用Context了,它会自动检测Case 2: 如果你在Context的Non Sub-class里写Context相关的代码。那你就必须使用上下文,它将无法检测到自己。需要注意的重要一点是,Context 主要在您需要应用程序的资源或进行任何 UI 工作时使用。如果您想在不同类的 Activity 中显示一些 UI,那么您需要该 Activity 的 Context。
    【解决方案3】:

    假设,您从 Activity 类或继承 Context 的某个组件传递 this。 在一种情况下,您不必传递 this,而是必须传递 getApplicationContext()。

    • 如果您的项目中有一个 Singleton 类,并且您想将上下文传递给它。建议使用 getApplicationContext() 而不是 this 或 activityContext。 因为,活动引用应该在内存中可用,直到其生命周期。在单例类中传递活动上下文可能会导致内存泄漏。

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 2011-10-10
      • 1970-01-01
      相关资源
      最近更新 更多