這裏的設置:Android:unarceling會導致內存不足異常。如何檢查物體?
- 我有一個活動與項目的列表(從服務器更新,由一個普通的Java類來表示)。項目通過自定義BaseAdapter和每行的自定義視圖呈現。
- 的項目實現Parcelable,所以當屏幕旋轉時,物品保存在束作爲ParcelableArrayList,則不必返回服務器中恢復。
到目前爲止,這是一個相當簡單的設置,但是我想將其中一個項目傳遞給另一個活動。捆綁有「pubExtra(字符串,Parcelable)」的方法,我想用把對象那裏,然後通過意圖通過。當我這樣做時,由於OutOfMemoryException,設備開始強制關閉。看起來,當試圖unarcel對象,它要求〜30mb(!)
似乎對象必須保持對其他東西的引用,因爲對象本身只包含幾個int/float/String字段和相關的方法。我一直無法通過查看代碼或調試檢查器來追蹤這一點,並且我不知道如何有效地使用堆查看器。
有什麼建議嗎?
這裏的堆棧跟蹤
/dalvikvm-heap(5876): Out of memory on a 29098436-byte allocation.
I/dalvikvm(5876): "main" prio=5 tid=1 RUNNABLE
I/dalvikvm(5876): | group="main" sCount=0 dsCount=0 s=N obj=0x4001d8d0 self=0xccc8
I/dalvikvm(5876): | sysTid=5876 nice=0 sched=0/0 cgrp=default handle=-1345017816
I/dalvikvm(5876): | schedstat=(1107116708 1124999998 2626)
I/dalvikvm(5876): at java.util.ArrayList.<init>(ArrayList.java:~84)
I/dalvikvm(5876): at android.os.Parcel.readArrayList(Parcel.java:1460)
I/dalvikvm(5876): at android.os.Parcel.readValue(Parcel.java:1792)
I/dalvikvm(5876): at android.os.Parcel.readMapInternal(Parcel.java:2007)
I/dalvikvm(5876): at android.os.Bundle.unparcel(Bundle.java:208)
I/dalvikvm(5876): at android.os.Bundle.containsKey(Bundle.java:249)
I/dalvikvm(5876): at <mypackage>.BaseDetailsActivity.isInModifyState(BaseDetailsActivity.java:184)
I/dalvikvm(5876): at <mypackage>.DetailsActivity.onCreate(DetailsActivity.java:230)
I/dalvikvm(5876): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
I/dalvikvm(5876): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
I/dalvikvm(5876): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
I/dalvikvm(5876): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
I/dalvikvm(5876): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
I/dalvikvm(5876): at android.os.Handler.dispatchMessage(Handler.java:99)
I/dalvikvm(5876): at android.os.Looper.loop(Looper.java:123)
I/dalvikvm(5876): at android.app.ActivityThread.main(ActivityThread.java:4627)
I/dalvikvm(5876): at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm(5876): at java.lang.reflect.Method.invoke(Method.java:521)
I/dalvikvm(5876): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
I/dalvikvm(5876): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
I/dalvikvm(5876): at dalvik.system.NativeStart.main(Native Method)
我有同樣的問題。我所做的是試圖以相反的順序讀取值(堆棧)。但實際上,您需要按照您輸入的順序來閱讀它們。 – 2012-08-13 13:32:51
我認爲它更像是一個二進制文件,所以它幾乎是先進先出的 – 2012-08-30 20:52:12
太棒了..幫助我..Thnaks! – 2016-12-18 17:23:40