2012-07-31 56 views
0

我有我的應用程序的主要問題。當我運行它,並選擇一個特定的活動,屏幕變黑,它基本上凍結。我在logcat中獲得了一長串GC消息。我下載了MAT,並分析了一堆以查找內存泄漏。我的問題是,我是這方面的新手,我不知道它告訴我泄漏的位置。Android:查找內存泄漏與墊

下面是它給我的三個。任何人都可以向我解釋如何解決這些問題嗎?我一直在瘋狂搜索,似乎無法找到任何幫助。

問題1:

The class "android.database.sqlite.SQLiteDatabase$ActiveDatabases", loaded by "<system class loader>", occupies 652,048 (20.70%) bytes. The memory is accumulated in one instance of "java.util.HashMap$HashMapEntry[]" loaded by "<system class loader>". 

問題2:

6,831 instances of "java.lang.String", loaded by "<system class loader>" occupy 456,472 (14.49%) bytes. 

問題3:

127 instances of "org.bouncycastle.jce.provider.X509CertificateObject", loaded by "<system class loader>" occupy 451,280 (14.32%) bytes. These instances are referenced from one instance of "java.util.Hashtable$HashtableEntry[]", loaded by "<system class loader>" 
+1

[這裏有一個谷歌IO使用MAT談](http://www.youtube.com/watch?v=_CruQY55HOk) – adneal 2012-07-31 01:49:33

+0

我其實已經看過這個,但是謝謝你的建議。 – SillyFidget 2012-07-31 01:56:21

回答

0

首先,你應該檢查SQLiteDatabase光標如果關閉時不能使用,尤其是滿足後例外。 我認爲你應該長時間觀察這些你'相信'的問題。因爲MAT只是猜測這些.U必須有證據表明一些對象佔用大量內存,導致你的應用被系統殺死。否則,你應該'搜索'android與谷歌著名的內存泄漏問題得到一條線索。

好運!

+0

這實際上有幫助。我不認爲我正確地關閉了我的遊標。爲了解決這個問題,我在DB Helper Class中創建了一個獨立的方法來關閉遊標(如果它是打開的),並在調用關閉數據庫之前調用它。謝謝! – SillyFidget 2012-07-31 22:16:27