1

Android用の簡単なアプリケーションを作成していますが、奇妙な問題が発生しています。2 つのアクティビティと Dictionary IntentService があります。Dictionary IntentService は、assets フォルダーに格納されているテキスト ファイルを HashMap に読み込むだけです。マニフェストに両方のアクティビティがあることに注意してください。

これは私がやっているすべてです:

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

最初のアクティビティは正常に実行され、2 番目のアクティビティが読み込まれ、nexus 7 エミュレーターにその UI が表示されます。しかし、2 番目のインテントを実行しようとすると、次の 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)

問題は、これらを個別に実行すると、正常に機能することです。したがって、2 つのインテントのいずれかを実行すると、アプリケーションは正常に動作します。新しく読み込まれたアクティビティ (AnActivity) から DictionaryService インテントを呼び出してみましたが、同じエラーが発生します。また、エミュレータでは 1024 Mb の RAM が割り当てられているため、十分なメモリがないわけではありません。何か案は?

ありがとう

4

2 に答える 2

0

大きなインテントを通過する OutOfMemory 例外が発生している場合は、Dalvik ヒープ メモリが不足している可能性があります。この場合、マシンには 1024 MB の RAM がありますが、Android は、実行している特定のデバイスに基づいて、個々の Dalvik ヒープを 16 ~ 64 MB に制限します。

詳細については、この有益な回答をお読みください: Android でアプリケーションのヒープ サイズを検出する

于 2013-05-03T00:51:08.083 に答える
0

誰かが同様の問題を抱えている場合、問題は@santaが以前のコメントで示したように、ファイルのサイズでした。代わりに、ファイルを3つの小さなファイルに分割し、それらを読み込んだところ、うまくいきました

于 2013-05-05T10:34:33.823 に答える