在非Activity类中使用Android Context

3
我经常遇到这样的问题,由于需要上下文,所以我不能使用某些东西。
例如,如果你想在一个类中使用Toast,你需要上下文,但是你不能使用任何上下文,因为你不在Activity中。
现在我做的是,在构造函数中给那个类设置了一个变量"context",但我真的认为这不对。
那么如何处理非Activity类中的上下文呢?
谢谢。

你为什么认为这不对呢? - Rajesh Gosemath
4
并非所有的上下文都是活动(Activity)上下文。您可以使用context.getApplicationContext()来检索不会泄漏的上下文。 - pathfinderelite
4个回答

2

永远不要将context作为成员变量或静态变量保存,因为这会导致内存泄漏,使GC难以收集引用。

由于您正在在非活动类中使用context,我假设该类是某种具有静态方法块的辅助类。

例如:

public class ToastMessageHelper {

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

}

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

现在,您可以简单地调用以下内容:

ToastMessageHelper.showToast(context);

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

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

0

0

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

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


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