OOM在具有较小RAM的设备上

时间:2014-01-08 12:44:16

标签: android json

我在assets文件夹中有两个json文件。问题是在内存较小的设备上出现内存不足错误。我该怎么做才能解决这个问题?我有以下代码:

存储json的变量

private static JSONObject one;
private static JSONObject two;

设置变量的方法

public static void setJSON(Context context){
    try {
         one = new JSONObject(loadJSON(context,"one.json"));
         two = new JSONObject(loadJSON(context,"two.json"));
    } catch (JSONException e) {
         e.printStackTrace();
    }
}

加载json的方法

private static String loadJSON(Context context, String filename){
    try {
        InputStream is = context.getAssets().open(filename);
        int size = is.available();
        byte[] buffer = new byte[size];
        is.read(buffer);
        is.close();
        String json = new String(buffer, "UTF-8");
        return json;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}

2 个答案:

答案 0 :(得分:0)

有一些想法可能对此有所帮助(并且它有助于显示JSON文件片段)

A)你的JSON文件有多大? JSON处理内存很重,因为您需要为解析器它在内存中创建的对象提供RAM。你能缩小JSON吗?

B)你能一次加载一个吗?过程,并免费?

C)如果所有其他方法都失败了,请尝试将它们分成几个对象,然后加载。

D)总而言之,JSON是一种可怕的序列化形式。如果您可以使用Java序列化,那么您将会看到更少的内存。

答案 1 :(得分:0)

不要使用JSON,而是将您的数据转换为普通的SQLite数据库,并将其预先填充到assets文件夹中的APK文件中。然后在第一次运行时将它安装到app文件夹(你可以使用this tool)然后,最后使用普通数据库,只需获取当时所需的数据,而无需加载整个JSON