【发布时间】:2010-04-01 22:14:12
【问题描述】:
Android 上的 R 类有其局限性。您不能动态地使用资源来加载音频、图片或其他任何内容。例如,如果您不想为所选对象加载一组音频文件,则不能执行以下操作:
R.raw."string-upon-choosen-object"
我是 android 新手,至少我没有找到如何做到这一点,这取决于选择的对象或比这更动态的东西。所以,我想用一点内存开销让它动态化。但是,我怀疑这是否值得,或者只是与外部资源不同。
想法是这样的:
修改ant build xml来执行我自己的任务。此任务是一个 java 程序,它解析 R.java 文件,并使用它的对(键,值)构建一组 HashMap。我已经手动完成了,效果很好。所以我需要一些专家的声音。
这就是我将如何管理整个事情的方式:
生成一个基类Application,例如MainApplicationResources 构建了所有需要的方法和属性。然后,您可以访问那些调用getApplication() 的方法,然后访问所需的方法。
类似这样的:
package [packageName]
import android.app.Application;
import java.util.HashMap;
public class MainActivityResources extends Application {
private HashMap<String,Integer> [resNameObj1];
private HashMap<String,Integer> [resNameObj2];
...
private HashMap<String,Integer> [resNameObjN];
public MainActivityResources() {
super();
[resNameObj1] = new HashMap<String,Integer>();
[resNameObj1].put("[resNameObj1_Key1]", new Integer([resNameObj1_Value1]));
[resNameObj1].put("[resNameObj1_Key2]", new Integer([resNameObj1_Value2]));
[resNameObj2] = new HashMap<String,Integer>();
[resNameObj2].put("[resNameObj2_Key1]", new Integer([resNameObj2_Value1]));
[resNameObj2].put("[resNameObj2_Key2]", new Integer([resNameObj2_Value2]));
...
[resNameObjN] = new HashMap<String,Integer>();
[resNameObjN].put("[resNameObjN_Key1]", new Integer([resNameObjN_Value1]));
[resNameObjN].put("[resNameObjN_Key2]", new Integer([resNameObjN_Value2]));
}
public int get[ResNameObj1](String resourceName) {
return [resNameObj1].get(resourceName).intValue();
}
public int get[ResNameObj2](String resourceName) {
return [resNameObj2].get(resourceName).intValue();
}
...
public int get[ResNameObjN](String resourceName) {
return [resNameObjN].get(resourceName).intValue();
}
}
问题是:
我会增加设备的过多内存使用吗?值得吗?
问候,
【问题讨论】:
标签: android