在非活动类

时间:2016-11-11 17:07:58

标签: java android class android-context

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

例如,如果你想要在某个类中使用Toast,你需要上下文,但是你不能使用任何上下文,因为你不在Activity中。

现在我做的是,我给了那个班级我做了一个变量" context"这是在构造函数中设置的,但我并不认为这是正确的。

那么如何处理非Activity类中的上下文?

提前致谢:)

4 个答案:

答案 0 :(得分:1)

如果您不参与某项活动,则可以始终使用getApplicationContext()来返回该应用的上下文。

答案 1 :(得分:0)

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

你可以在这里阅读一下:
Best practice to pass Context to non-activity classes?
或这里
http://itekblog.com/android-context-in-non-activity-class/

您还可以使用变量" context"或者通过静态方法中的参数传递,你应该没问题,记住你可能会遇到一些问题。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

例如:

public class ToastMessageHelper {

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

}

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

现在,你可以简单地打电话,

ToastMessageHelper.showToast(context);

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