我想知道是否可以这样做:每当我们传递Context
变量时,我们是否可以从Application类获取单例引用
例如,这里是Application
类的子类,其中一个静态变量指向自己的实例
public class App extends Application {
public static mApp;
@Override
public void onCreate(){
mApp = this;
}
}
然后当我们需要从某个地方将Context
传递给某个方法时,我们可以这样做吗
foo(App.mApp);
将Context
视为应用程序变量是否可以?
答案 0 :(得分:1)
这取决于您使用它的上下文。很多时候,上下文意味着在生命周期完成之前保留一些东西,然后允许垃圾收集回收它拥有的任何东西。
其他时候,上下文需要是一个处理生命周期回调的活动,例如onNewIntent或onActivityResult。
在父级中保留静态实例只是一种快捷方式,可以避免必须使用getApplication()并将其转换为您的应用程序类型。我通常为MyApplication.getApplication()。doSomething创建一个方法,它将返回它自己的引用而不是((MyApplication)getApplication())。doSomething
编码目的似乎更清晰。但是我会非常谨慎地在你需要一个上下文的地方使用应用程序上下文,它最终会回来咬你。
但是,你可以把自己存储为静态变量来共享,我在大多数应用程序中都这样做,但通常用于清洁可维护代码的特定快捷方式,而不是欺骗从各种裂缝中获取上下文。