【问题标题】:Working with Android Context in non-Activity Class在非 Activity 类中使​​用 Android 上下文
【发布时间】:2016-11-11 17:07:57
【问题描述】:

我经常遇到问题,因为它需要的上下文,我不能使用它。

例如,如果您想在 Class 中使用 Toast 来做某事,则需要 Context 但不能使用任何上下文,因为您不在 Activity 中。

现在我所做的是,我给那个 Class 我做了一个在构造函数中设置的变量“context”,但我真的不认为这是正确的。

那么我该如何处理非活动类中的上下文呢?

提前致谢:)

【问题讨论】:

  • 为什么觉得不对?
  • 并非所有上下文都是活动上下文。您可以使用context.getApplicationContext() 检索不会泄漏的上下文。

标签: java android class android-context


【解决方案1】:

永远不要将上下文的引用保存为成员变量或静态变量,因为它可能导致内存泄漏,因为 GC 收集引用变得困难。

由于您在非活动类中使用上下文,因此我假设该类是某种带有静态方法块的辅助类。

例如:

public class ToastMessageHelper {

   public static void showToast(Context context) {
       Toast.makeText(context, "Hello",Toast.LENGTH_SHORT).show();
   }

}

最好将上下文作为参数传递给需要上下文执行的方法。

现在,您可以简单地调用,

ToastMessageHelper.showToast(context);

在您的活动或片段中。希望这会有所帮助!

【讨论】:

    【解决方案2】:

    如果您不在活动中,您始终可以使用getApplicationContext(),它将返回应用程序的上下文。

    【讨论】:

      【解决方案3】:

      是的,你是对的,你通常将 Context 传递给可能需要它的所需对象或类,有时你在构造函数中传递它,但知道有时上下文可能会改变最好在方法中直接传递它。由开发人员选择正确的方案。

      确实在某些情况下您可能需要另一种方式来获取或传递上下文,但通常在构造函数或方法中传递它就足够了

      【讨论】:

        【解决方案4】:

        在非 Activity 类中使​​用上下文的一种复杂方法是​​ ContextWrapper

        您可以在这里阅读一些相关信息:
        Best practice to pass Context to non-activity classes?
        或这里
        http://itekblog.com/android-context-in-non-activity-class/

        您也可以使用变量“上下文”或在静态方法中传递参数,您应该没问题,但请记住,您可能会在这种做法中遇到一些问题。

        【讨论】:

          猜你喜欢
          • 2011-11-21
          • 1970-01-01
          • 2013-09-22
          • 2018-09-13
          • 2023-04-02
          • 1970-01-01
          • 2012-01-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多