Android:导致崩溃的意图

时间:2013-05-02 23:34:28

标签: android android-intent

我正在为android创建一个简单的应用程序,但我遇到了一个奇怪的问题。我有两个活动,一个Dictionary IntentService。 Dictionary IntentService只是将存储在assets文件夹中的文本文件读入HashMap。请注意,我在Manifest中有两个活动。

这就是我正在做的事情:

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

第一个活动运行正常,它加载第二个活动并在nexus 7模拟器上显示它的UI。但是当它试图运行第二个Intent时,我得到了这个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 个答案:

答案 0 :(得分:0)

如果你得到OutOfMemory异常传递大意图,那么你很可能用完了Dalvik堆内存。即使这种情况下的机器具有1024 MB的RAM,Android也会根据您运行的特定设备将每个Dalvik堆限制为16-64 MB。

有关详细信息,请阅读这个内容丰富的答案:Detect application heap size in Android

答案 1 :(得分:0)

如果有人遇到类似的问题,那么问题就在于@santa之前的评论中指出的文件大小。因此,我将文件拆分为3个较小的文件并因此读取它们,并且它可以工作