为什么Android需要上下文来访问资源?
我得到了为什么Android要求您在尝试获取视图时传递一个Context对象,例如显示Toast等。
但是,我并没有真正明白要求它访问应用程序中不同上下文可以共享的资源。
我多次发现自己试图使用静态方法或类似的东西来访问实用程序类中的资源,并发现需要传递Context参数非常烦人。
我没有看到有什么东西可以南下。
从官方文档:
接口有关应用程序环境的全局信息。 这是一个抽象类,其实现由Android系统提供。 它允许访问特定于应用程序的资源和类,以及对诸如启动活动,广播和接收意图等应用程序级操作的上调。
很明显,上下文是电话资源和你的代码之间的中间人。 看起来合乎逻辑的是,你无法从任何地方访问它。
你只能在Activity和Application类中访问Context的原因是因为它们都来自Context:
java.lang.Object继承
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.view.ContextThemeWrapper
↳ android.app.Activity
通过您自己的public class MyApp extends Application
并将MyApp
注册到您的清单中,并让MyApp
如下所示:
class MyApp extends Application {
...
private static ApplicationContext context;
@Override
public static void onCreate() {
super.onCreate();
context = this;
}
public static String string(int resId) {
return context.getString(resId);
}
}
然后你可以从任何地方做MyApp.string(R.id.mystring)
。 您可以为其他资源类型执行相同的操作。
如果您愿意,也可以(MyApp)getApplication()
。
上一篇: Why does Android require a Context to access a resource?