android - 当 hashmap > 512 时 JNI 溢出

标签 android java-native-interface hashmap overflow

使用资源文件,我创建了一个大 HashMap

HashMap<String, String> bigHash = new HashMap<String, String>();
public void createHash(){
    String [] items = getResources().getStringArray(R.array.dual_strings);
    String [] temp;
    for ( String s : items ){
        temp = s.split("@");
        bigHash.put(temp[0],temp[1]);
    }
}

dual_string.xml 充满了像这样的记录 “ sleep @每天最好睡 6 小时以上”

但是,我尝试使用一个大的(~1000 项)dual_strings.xml 文件,应用程序在启动后立即崩溃。 查看 LogCag “dalvikvm 无法添加到 JNI 本地引用表(有 512 个条目)”

我可以做些什么来从我的长资源文件中创建和使用大哈希值吗? 谢谢

最佳答案

这看起来像是 Android 的 getStringArrayResources native 代码中的错误。我发现已经有一个关于这个的错误。在 native 代码中很容易看出原因(引用是在循环中创建的,但未清除)。

http://code.google.com/p/android/issues/detail?id=5287&q=getArrayStringResource&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

现在,您必须解决这个错误。您必须将字符串数组拆分为更小的 block ,每个 block <500 个字符串,或者编写您自己的自定义字符串数组加载方法。也许其他人可以提出更好的解决方案。

关于android - 当 hashmap > 512 时 JNI 溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774335/

相关文章:

java - 查找与 DLL 中的偏移量匹配的 Delphi 源代码行

java - 在 Java 中使用 C++ ".lib"文件

java - 具有可比较键的 HashMap 无法按预期工作

java - 在转换方法中从 Map 接收带有 String 键的对象

java - 从 HashMap 获取第一个和最后一个元素

java - 闹钟管理器唤醒

android - 发布带有数据库的应用程序

android - 下面的 LinearLayout 不显示?

android - HttpURLConnection 方法总是 GET?

c++ - 如何从 JNI 返回 vector<vector<float>>?