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();
}
}
问题是:
我会添加过多的设备内存使用吗?这值得么?
Regards,