Android out of memory Exception

  • Antworten:1
Franz Josef
  • Forum-Beiträge: 21

24.01.2013, 19:41:59 via Website

Hallo Leute,

Ich will eine 2,2MB große Excel Datei auf dem Tablet beschreiben und bekomme folgende Zeile im LogCat

101-24 18:27:52.050: E/dalvikvm-heap(15237): Out of memory on a 260-byte allocation.
201-24 18:27:52.050: I/dalvikvm(15237): "AsyncTask #2" prio=5 tid=14 RUNNABLE
301-24 18:27:52.050: I/dalvikvm(15237): | group="main" sCount=0 dsCount=0 obj=0x43831d60 self=0x9f6f10
401-24 18:27:52.050: I/dalvikvm(15237): | sysTid=15460 nice=10 sched=0/0 cgrp=bg_non_interactive handle=10186448
501-24 18:27:52.050: I/dalvikvm(15237): | schedstat=( 146887573731 7492461799 410764 ) utm=13855 stm=832 core=0
601-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFRow.<init>(HSSFRow.java:~92)
701-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFSheet.createRowFromRecord(HSSFSheet.java:250)
801-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFSheet.setPropertiesFromSheet(HSSFSheet.java:166)
901-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFSheet.<init>(HSSFSheet.java:120)
1001-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:292)
1101-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:243)
1201-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:187)
1301-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:322)
1401-24 18:27:52.050: I/dalvikvm(15237): at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:303)
1501-24 18:27:52.050: I/dalvikvm(15237): at com.tachport.tools.eu.Excel.doInBackground(Excel.java:47)
1601-24 18:27:52.050: I/dalvikvm(15237): at com.tachport.tools.eu.Excel.doInBackground(Excel.java:1)
1701-24 18:27:52.050: I/dalvikvm(15237): at android.os.AsyncTask$2.call(AsyncTask.java:264)
1801-24 18:27:52.050: I/dalvikvm(15237): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
1901-24 18:27:52.050: I/dalvikvm(15237): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
2001-24 18:27:52.050: I/dalvikvm(15237): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
2101-24 18:27:52.050: I/dalvikvm(15237): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
2201-24 18:27:52.050: I/dalvikvm(15237): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
2301-24 18:27:52.050: I/dalvikvm(15237): at java.lang.Thread.run(Thread.java:856)
2401-24 18:27:52.824: D/dalvikvm(15237): threadid=14: still suspended after undo (sc=1 dc=1)
2501-24 18:27:52.832: I/dalvikvm-heap(15237): Clamp target GC heap from 65.937MB to 64.000MB
2601-24 18:27:52.832: D/dalvikvm(15237): GC_CONCURRENT freed <1K, 1% free 65399K/65543K, paused 2ms+5ms
2701-24 18:28:29.730: W/dalvikvm(15237): threadid=14: thread exiting with uncaught exception (group=0x40bd21f8)
2801-24 18:28:38.746: D/dalvikvm(15237): GC_CONCURRENT freed 2547K, 5% free 62853K/65543K, paused 5ms+4ms
2901-24 18:28:38.918: E/AndroidRuntime(15237): FATAL EXCEPTION: AsyncTask #2



Hier noch der Problemcode

1try {
2 InputStream in = new FileInputStream(pfad);
3 wb = WorkbookFactory.create(in); genau hier crasht es... //
4 in.close();
5 FileOutputStream out = null;
6 try {
7 out = new FileOutputStream(pfad);
8 wb.write(out);
9 } catch (Exception e) {
10 e.printStackTrace();
11 }finally {
12 if(out != null){
13 try {
14 out.flush();
15 out.close();
16 dialog.dismiss();
17 } catch (Exception e2) {
18 dialog.dismiss();
19 e2.printStackTrace();
20 }
21 }
22 }



Kann man die 2,2MB große Excel Datei eleganter in das Workbook zu bekommen?
Der Prozess der das ganze zum abstürzen bringt ist das erstellen des Workbooks mit der großen Excel Datei.

Gibt es irgendwie eine Möglichkeit die diesen memory Fehler zu umgehen?
Ihr würdet mir mit jeder Kleinigkeit weiterhelfen...


Lieben Gruß

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

24.01.2013, 21:32:08 via Website

Wenn du vorher mit deiner App noch keine anderen Operationen machst, die Speicher verbrauchen, ist das schon recht heftig. Laut Fehlermeldung testest du auf einem Gerät mit 64MB Heap. Standard (bzw. Worst-Case für den man entwickeln sollte) ist 16MB.

Man kann auch nicht beliebig große Bilder als Bitmaps laden. Dort behilft man sich mit einem Skalierungsfaktor.
Evtl. kann deine Library ja auch Sheets teilweise laden? (Ich kenne die leider nicht, aber das erschiene mir sehr logisch)

Antworten