Android:静态获取Context是一个好习惯吗?

mar*_*595 12 android

目前,在我的应用程序中,我有以下课程:

public class MyApp extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        MyApp.context = getApplicationContext();
    }

    public static Context getContext() {
        return MyApp.context;
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用它来在既不是活动也不是片段的类中使用Context.使用存储在此类上的上下文与使用和活动作为上下文之间有什么区别?有这个课程是一个好习惯,还是应该为任何需要它的班级提供一个活动作为背景?

谢谢.

Com*_*are 16

使用存储在此类上的上下文与使用和活动作为上下文之间有什么区别?

是.请阅读戴夫史密斯关于这个主题的史诗博客文章.总结:只有Application当你知道为什么 Application是正确的答案时才使用...而且它很少.

拥有这门课程是一种很好的做法

恕我直言,通常不是.您有时可能需要一个Application对象,但您不需要自己的自定义子类,也不需要将其设为单例.

我应该为任何需要它的班级提供活动作为背景吗?

您可以为需要它的任何方法提供正确的 Context实例.正如Dave Smith在博客文章中描述的那样,并非所有Context实例都是平等的.只有在正确的Application时候才使用.ApplicationContext


Dav*_*ser 5

是的,这很好。静态引用该应用程序Context不会导致任何内存泄漏。这个Context只要过程是活着的存在。