CommonsWare के जवाब उनका विस्तार करने के लिए:
मुझे पता नहीं है कि अगर यह काम करता है, लेकिन आप adding a top-level exception handler कोशिश कर सकते हैं, और वहाँ asking for a heap dump में अगर यह एक OutOfMemoryError
है।
मैं निम्नलिखित कोड के साथ अपने ही Android एप्लिकेशन में सफलतापूर्वक अपने सुझाव का पालन किया: चालू करें क्लिक करें ":
public class MyActivity extends Activity {
public static class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
Log.e("UncaughtException", "Got an uncaught exception: "+ex.toString());
if(ex.getClass().equals(OutOfMemoryError.class))
{
try {
android.os.Debug.dumpHprofData("/sdcard/dump.hprof");
} catch (IOException e) {
e.printStackTrace();
}
}
ex.printStackTrace();
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.currentThread().setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
}
}
बाद डंप बनाया गया है, तो आप अपने पीसी के अपने फोन से इसे कॉपी करने की जरूरत है यूएसबी स्टोरेज "फोन पर, फ़ाइल ढूंढें और इसे अपनी हार्ड ड्राइव पर कॉपी करें। अंत में hprof-conv.exe dump.hprof dump-conv.hprof
(HPROF-रूपा android-sdk/tools
के नीचे स्थित है)
, dump-conv.hprof
खोलें:
उसके बाद, आप ग्रहण मेमोरी विश्लेषक (मेट) का उपयोग करने फ़ाइल का विश्लेषण करना चाहते हैं, तो आप फ़ाइल को गुप्त करने की आवश्यकता होगी MAT
मैंने देखा है कि यह अक्सर काम करता है, लेकिन कभी-कभी इसका परिणाम डंप नहीं होता है। यकीन नहीं है कि क्यों। – emmby
मैंने भी वही किया है और कभी-कभी डंप फ़ाइल दूषित होती है (या कम से कम hprof-conv ऐसा लगता है)। मैं डंपिंग से पहले System.gc() करने के लिए केवल एक सुझाव जोड़ूंगा। – snowdragon
फ़ाइल समाप्त होने से पहले, या (खराब) समाप्त होने से पहले एप्लिकेशन को समाप्त कर दिया गया था। –