2010-10-22 30 views
5

यहाँ सेटअप है:एंड्रॉइड: अपवाद का कारण अपवाद का कारण बनता है। वस्तुओं का निरीक्षण कैसे करें?

  • मैं मदों की एक सूची (सर्वर से अद्यतन, एक सादे जावा वर्ग द्वारा प्रतिनिधित्व) के साथ एक गतिविधि है। आइटम को कस्टम बेस एडाप्टर और प्रत्येक पंक्ति के लिए कस्टम व्यू के माध्यम से प्रस्तुत किया जाता है।
  • आइटम पार्ससेलबल को लागू करते हैं, ताकि जब स्क्रीन घुमाया जाए, तो आइटम को बंडल में एक पार्ससेलएबलरेस्टिस्ट के रूप में सहेजा जाता है, फिर सर्वर पर वापस जाने के बिना बहाल किया जाता है।

अभी तक, यह एक काफी सरल सेटअप है, हालांकि मैं इन वस्तुओं में से किसी एक को दूसरी गतिविधि में पास करना चाहता हूं। बंडल में "पबएक्स्ट्रा (स्ट्रिंग, पार्ससेलबल)" विधि है, जिसे मैं ऑब्जेक्ट को वहां रखने के लिए उपयोग करना चाहता था, फिर इरादे से गुजरता हूं। जब मैंने ऐसा किया, तो डिवाइस को OutOfMemoryException के कारण एक बल बंद करना शुरू हो गया। ऐसा लगता है कि ऑब्जेक्ट को अचूक करने की कोशिश करते समय, यह ~ 30 एमबी (!)

ऐसा लगता है कि ऑब्जेक्ट किसी अन्य चीज़ के संदर्भ में होना चाहिए, क्योंकि ऑब्जेक्ट में केवल कुछ 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) 

उत्तर

13

मैं एक ही समस्या यह है कि इस के लिए नीचे उबला हुआ था: मैं फिसल गया और मेरे चर नहीं दिया में से एक सही अनुक्रम में लिखा नहीं जा रहा है। मुझे लगता है कि पार्ससेल योग्य बहुत कम स्तर पर काम करता है।

मेरा अनुमान है कि निम्न स्तर पर, यह गलत स्मृति स्थान पर एक सरणी सूची पढ़ने की कोशिश की, और इसे " पढ़ना बंद करो! "सी gnal। इसलिए, जब तक हीप स्पेस ऐप सीमा तक नहीं पहुंच जाता तब तक यह पागल की तरह पढ़ रहा था। * मैं भी अनुमान लगा रहा हूँ आप शायद था कि/एक ऐसी ही समस्या आ रही है

निष्कर्ष: किसी अपने Parcelable पढ़ने और लिखने कार्यों की अच्छी तरह जांच और सुनिश्चित करें कि वे पढ़ रहे हैं/उसी क्रम में चर लिखने

  • भले ही यह बहुत समय पहले पूछा गया था। मुझे Google के माध्यम से यह पृष्ठ मिला, इसलिए आगे बढ़ गया और अगर किसी और को एक ही समस्या हो तो इसे पोस्ट किया गया।

संपादित करें: मैं एलिविन के सुझाव की भी सिफारिश करता हूं और मैं इसे वोट देने के लिए प्रोत्साहित करता हूं। इसने वास्तव में मुझे पार्सल ऑब्जेक्ट

+1

में एरेलिस्टिस्ट को कम करने में मेरी सहायता की, मुझे भी यही समस्या थी। मैंने जो किया वह रिवर्स ऑर्डर (स्टैक) में मूल्यों को पढ़ने की कोशिश कर रहा था। लेकिन वास्तव में आपको उन्हें उसी क्रम में पढ़ने की आवश्यकता है जिसे आप उन्हें डालते हैं। –

+0

मुझे लगता है कि यह एक बाइनरी फ़ाइल की तरह काम करता है, इसलिए यह बहुत अधिक फीफो –

+0

ग्रेट है..मुझे लगाया..धन्यवाद! –

5

आप Eclipse Memory Analyzer Tool उपयोग करने का प्रयास करना चाहिए। इसे ग्रहण के लिए प्लगइन के रूप में स्थापित करें, और उसके बाद डीडीएमएस में "डंप एचप्रोफ फ़ाइल" बटन का उपयोग करें (डिवाइस टैब पर नीचे तीर वाला हरा सिलेंडर जैसा दिखता है)। मैट स्थापित होने के साथ, ग्रहण को इसे कुछ दृश्यों के साथ लॉन्च करना चाहिए ।। अपनी स्मृति का निरीक्षण

आप अपने कोड के कुछ पोस्ट करते हैं तो किसी भी समस्या का पता लगाने में सक्षम हो सकता

संबंधित मुद्दे