我发布这个问题,希望我能得到某种确定的答案。Android:访问资源时没有活动或上下文refeerence
如果没有活动或上下文参考,是否真的无法访问资源?在需要的时候传递这些引用是为了访问一些与UI无关的值或资产或字符串,从而导致过于复杂的代码。
加上所有这些潜在的悬挂引用。
此外,这完全破坏了各种设计模式,如单例,在获取实例时必须提供参数。
把静态参考
那么,有没有一种方法或做整个社会刚刚与这个问题居住。
我发布这个问题,希望我能得到某种确定的答案。Android:访问资源时没有活动或上下文refeerence
如果没有活动或上下文参考,是否真的无法访问资源?在需要的时候传递这些引用是为了访问一些与UI无关的值或资产或字符串,从而导致过于复杂的代码。
加上所有这些潜在的悬挂引用。
此外,这完全破坏了各种设计模式,如单例,在获取实例时必须提供参数。
把静态参考
那么,有没有一种方法或做整个社会刚刚与这个问题居住。
使您的Application
类成为单身人士并使用它。这是一个Context
。所有资源都与您的应用绑定,因此您需要一个Context
参考。如果您不想动态加载它们,可以在单例类中预加载字符串等。
你的资源被捆绑到一个上下文中,这是一个事实,你不能改变它。
这里是你可以做什么:
扩展Application
,获取应用程序上下文和使用,作为一个静态辅助。
public class App extends Application {
private static Context mContext;
public static Resources getResources() {
return mContext.getResources();
}
public void onCreate() {
super.onCreate();
mContext = getApplicationContext();
}
}
你的清单:
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:name="your.package.path.to.App">
另一种方法是将有活动加载资源,然后传递这些作为参数传递给其它目的而不是传递一个上下文对象。但是这种模式是我使用的。 :) –
好像我们不能调用方法'getResources',因为已经存在一个名为'getResources'的非静态成员方法,它继承自'ContextWrapper',[见这里](https://github.com/android/ platform_frameworks_base/blob/master/core/java/android/content/ContextWrapper.java#L83) – sled
将'getResouces()'重命名为'getResourcesSafe()'或其他 – ChrisMcJava