为什么Android需要Context才能访问资源?

时间:2014-11-27 12:27:27

标签: android

我明白为什么Android在尝试获取视图时会要求您传递Context对象,例如显示Toast等。

但是,我并不是真的要求它访问可以由您的应用程序中的不同上下文共享的资源。

我曾多次发现自己试图使用静态方法或类似的东西从实用程序类访问资源,并且发现要求传递Context参数非常烦人。

我没有看到有什么东西可以向南走。

2 个答案:

答案 0 :(得分:2)

来自official documentation

  

有关应用程序环境的全局信息的接口。这个   是一个抽象类,其实现由Android提供   系统。它允许访问特定于应用程序的资源和   类,以及应用程序级操作的上调,如   发起活动,广播和接收意图等。

清楚地说,上下文是电话资源和代码之间的中间人。似乎合乎逻辑,你无法从任何地方访问它。

您只能访问Activity和Application类中的Context的原因是因为它们都源自Context:

  

java.lang.Object

↳ android.content.Context

  ↳ android.content.ContextWrapper

      ↳ android.view.ContextThemeWrapper

          ↳ android.app.Activity

答案 1 :(得分:1)

通过您自己的public class MyApp extends Application扩展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()