2013-05-02 236 views
1

我正在爲android創建一個簡單的應用程序,但我正在運行一個奇怪的問題。我有兩個活動,一個Dictionary IntentService。 Dictionary IntentService只是將存儲在資產文件夾中的文本文件讀取到HashMap中。請注意,我在清單中都有兩項活動。Android:意圖導致崩潰

這是我做的:

Intent intent = new Intent(this, AnActivity.class); 
    startActivity(intent); 
    Intent intentDict = new Intent(this, DictionaryService.class); 
    startService(intentDict); 

的第一項活動運行正常,它加載第二個活動,並表示這是對的Nexus 7仿真器UI。但是,當它試圖運行第二個意圖我得到這個OutOfMemory錯誤:

05-02 23:29:48.507: I/dalvikvm(797): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-02 23:29:48.507: I/dalvikvm(797): at android.os.Looper.loop(Looper.java:137) 
05-02 23:29:48.507: I/dalvikvm(797): at android.os.HandlerThread.run(HandlerThread.java:60) 
05-02 23:29:48.517: W/dalvikvm(797): threadid=11: thread exiting with uncaught exception (group=0x40a71930) 
05-02 23:29:48.527: E/AndroidRuntime(797): FATAL EXCEPTION: IntentService[DictionaryService] 
05-02 23:29:48.527: E/AndroidRuntime(797): java.lang.OutOfMemoryError 
05-02 23:29:48.527: E/AndroidRuntime(797): at java.util.HashMap.makeTable(HashMap.java:555) 
05-02 23:29:48.527: E/AndroidRuntime(797): at java.util.HashMap.doubleCapacity(HashMap.java:575) 
05-02 23:29:48.527: E/AndroidRuntime(797): at java.util.HashMap.put(HashMap.java:405) 
05-02 23:29:48.527: E/AndroidRuntime(797): at java.util.HashSet.add(HashSet.java:95) 
05-02 23:29:48.527: E/AndroidRuntime(797): at com.example.androidApp.Dictionary.readInData(Dictionary.java:73) 
05-02 23:29:48.527: E/AndroidRuntime(797): at com.example.androidApp.Dictionary.<init>(Dictionary.java:35) 

現在的問題是,當我獨自做這些,他們工作得很好。所以如果我運行這兩個意圖中的一個,應用程序就能正常工作。我已經嘗試從新加載的活動(AnActivity)調用DictionaryService意圖,但會導致相同的錯誤。仿真器也具有1024 Mb的RAM分配,因此它不像它沒有足夠的內存。有任何想法嗎?

感謝

+2

「仿真器也具有1024 Mb的RAM分配,所以它不像它沒有足夠的內存」 - 在模擬設備中有多少RAM。你的應用程序的堆空間會少得多,在16-96MB的範圍內。 – CommonsWare 2013-05-03 00:15:36

+0

你正在閱讀的文件有多大? – Santa 2013-05-03 00:50:20

+0

@Santa這個文件是2.5 MB,那麼你估計得太大了嗎?如果是這樣,我應該找到另一種實現字典功能的方式嗎? – Argilium 2013-05-03 01:22:18

回答

0

如果您收到OutOfMemory異常繞過大意圖,那麼你最有可能運行出的Dalvik堆內存。儘管本例中的機器具有1024 MB的RAM,但Android根據您正在運行的特定設備將每個Dalvik堆限制爲16-64 MB。

有關更多詳細信息,請閱讀本翔實的答案:Detect application heap size in Android

0

如果任何人有類似的問題,這個問題是由於@santa在評論中表示之前,該文件的大小。所以相反,我把文件分成3個小文件,並在結果中讀取它們,並且它的工作原理如下: