我理解为什么在Android中,当你想获取一个视图或者显示一个Toast时需要传递上下文对象。
但是,我不太理解为什么需要它来访问在应用程序中不同上下文间可共享的资源。
我曾多次尝试使用静态方法或类似的方式从工具类中访问资源,而且发现需要传递上下文参数非常烦人。
我无法看出其中出现问题的可能性。
我理解为什么在Android中,当你想获取一个视图或者显示一个Toast时需要传递上下文对象。
但是,我不太理解为什么需要它来访问在应用程序中不同上下文间可共享的资源。
我曾多次尝试使用静态方法或类似的方式从工具类中访问资源,而且发现需要传递上下文参数非常烦人。
我无法看出其中出现问题的可能性。
来自官方文档:
应用程序环境的全局信息接口。这是一个抽象类,其实现由Android系统提供。它允许访问特定于应用程序的资源和类,以及针对应用程序级操作(如启动活动、广播和接收意图等)的向上调用。
简而言之,Context是电话资源和你的代码之间的中间人。很明显,你不能从任何地方访问它。
只有在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()
。Application
- 通常它只用于维护全局状态,而不是作为Context
实例的跳板。另外,应用程序Context
有一些限制,所以按照你的设计示例可能在某些情况下无法正常工作。 - Squonk