2015-11-01 57 views
0

我想創建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和任何信息將不勝感激,謝謝!

+1

你想用這些值做什麼?你的示例代碼只是加載它們。另外,你使用'Runnable'錯誤。 – Kayaman

+4

你可以改變邏輯,使它不需要同時在內存中存儲所有的字符串嗎? – NormR

+0

同意。裝載467,608個字符串不太可行,特別是在低端Android設備上。 – CommonsWare

回答

0

你不知道。你可以做的最低限度是將字符串放到一個數據庫中,並在不加載字符串到內存的情況下查詢它。

+0

謝謝!我會給它一個鏡頭 –

相關問題