我想創建2個大型數組,每個大約235000個字符串,從文本文件讀取,但是我得到一個OutOfMemory錯誤。這裏是我的代碼...不知道如何創建沒有OutOfMemory的大型數組Android
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和任何信息將不勝感激,謝謝!
你想用這些值做什麼?你的示例代碼只是加載它們。另外,你使用'Runnable'錯誤。 – Kayaman
你可以改變邏輯,使它不需要同時在內存中存儲所有的字符串嗎? – NormR
同意。裝載467,608個字符串不太可行,特別是在低端Android設備上。 – CommonsWare