2012-07-31 183 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