Android内存泄漏?

我认为我的Android应用程序泄漏内存。 我不确定这是否是问题。

每当打开应用程序时,应用程序崩溃,并且logcat显示尝试加载位图图像的“内存不足”exception。

崩溃后,我重新打开应用程序,它工作正常。 Logcat显示了很多“gc”,每隔一段时间,JIT表格就会向上resize,直到应用程序崩溃,出现内存不足错误。

这听起来像是内存泄漏吗? 如果是这样,我怎么去find和closures泄漏。

这是我的应用程序的adbshellmeminfo。

** MEMINFO in pid 2691 [com.example.deepcliff] ** native dalvik other total size: 23264 8839 N/A 32103 allocated: 12503 3826 N/A 16329 free: 168 5013 N/A 5181 (Pss): 2512 1395 13815 17722 (shared dirty): 2088 1844 5008 8940 (priv dirty): 2412 224 11316 13952 Objects Views: 0 ViewRoots: 0 AppContexts: 0 Activities: 0 Assets: 2 AssetManagers: 2 Local Binders: 55 Proxy Binders: 13 Death Recipients: 1 OpenSSL Sockets: 0 SQL heap: 129 MEMORY_USED: 129 PAGECACHE_OVERFLOW: 9 MALLOC_SIZE: 50 DATABASES pgsz dbsz Lookaside(b) Dbname 1 14 10 webview.db 1 6 18 webviewCache.db Asset Allocations zip:/data/app/com.example.deepcliff-2.apk:/resources.arsc: 17K 

Solutions Collecting From Web of "Android内存泄漏?"

这里有几篇文章和文章,可能会帮助你走上正确的道路:

Android SDK附带的分配跟踪器非常有用。 阅读罗曼·盖伊的文章。 它帮助我追踪相当可怕的泄漏。 它也可以帮助你写出更好的软件。 例如,我学会了创build更less的对象,使用更多的StringBuilder,并caching更多:
哪些Android工具和方法最适合查找内存/资源泄漏?

有时候,你的应用程序太混乱了,你必须重新devise整个应用程序。 这是官方的,好的提示(我最喜欢的是避免创build不必要的对象 ):
http://developer.android.com/guide/practices/design/performance.html

这里有一篇关于攻击你的记忆力问题的优秀文章:
http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html

官方文章关于避免内存泄漏:
http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html

另外阅读这个: 工具来检查android中的内存泄漏

其他人已经指出了位图 。 这里有一篇文章描述这个问题:http: //zrgiu.com/blog/2011/01/android-bitmaps-and-out-of-memory-errors/

这不是内存泄漏。 Android设备只有有限的内存,您的位图必须太大。 您需要find一种方法来减小位图的大小。 我真的不能告诉你,因为你没有给我们太多的东西继续下去。

最大应用程序VM堆大小的典型值是24 MB。 因此,例如,如果您的图像是10Mpx(3600 x 2400),那么它将分配3600 x 2400 x 4 = 34'560'000字节,这是一个OutOfMemoryError情况。

在Android中处理位图时,请确保在完成使用后回收位图。 您可以通过设置inSampleSize选项来加载resize的位图。 更多细节在这里: http : //developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize