不确定如何在没有OutOfMemory Android

时间:2015-11-01 21:27:49

标签: java android arrays

我正在尝试创建2个大型数组,每个数组大约235000个字符串,从文本文件中读取,但是我收到OutOfMemory错误。这是我的代码......

InputStream ins = getResources().openRawResource(
                getResources().getIdentifier("mobypos", "raw", getPackageName()));
        scanner = new Scanner(ins);
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                int i = 0;
                String[] array;
                ALLWORDS = new String[233804];
                ALLPOS = new String[233804];
                while (i < 233804) {
                    array = scanner.nextLine().toString().split("\\\\");
                    ALLWORDS[i] = array[0];
                    ALLPOS[i] = array[1];
                    i++;
                }
            }
        };
        runnable.run();

当我尝试运行时,我收到此错误,

11-01 15:15:54.026    6229-6229/dmj_tech.essayassist E/art﹕ Throwing OutOfMemoryError "Failed to allocate a 1913508 byte allocation with 574084 free bytes and 560KB until OOM"
11-01 15:15:54.027    6229-6229/dmj_tech.essayassist E/AndroidRuntime﹕ FATAL EXCEPTION: main

我理解,它耗尽了内存,因为它是一项大任务,但我的问题是如何以一种不会让我的应用程序崩溃的方式完成此操作?如果操作需要一段时间,那就没关系,速度不是现在的优先级。 即使这个过程基本上使用了我的所有记忆一段时间,但一旦它停止这个任务,它是否会自由备份? (有没有办法这样做,逐个部分,直到它完成?)我已经看到一些关于暂时使用缓存或内部目录的帖子,不确定这是否适用于此。我对android很少有经验,非常感谢任何信息,谢谢!

1 个答案:

答案 0 :(得分:0)

你不是。您可以做的最小事情是将字符串放到db并查询它,而不将字符串加载到内存中。