我有一个在大多数手机上运行正常的应用程序(例如Nexus **):内存使用量永远不会超过24MB。 但在我的索尼爱立信Xperia Arc上运行几天后,它使用了超过70MB的RAM(根据设置 - >应用程序 - >运行服务)。
Runtime.getRuntime()。maxMemory()表示我的手机最大堆大小只有32MB。
有没有什么方法可以通过这款手机了解我的应用程序发生了什么?
以下是此应用的adb meminfo:
C:\>adb -d shell dumpsys meminfo 4606
Applications Memory Usage (kB):
Uptime: 409334045 Realtime: 585217200
** MEMINFO in pid 4606 [com.*****************] **
native dalvik other total
size: 60796 10695 N/A 71491
allocated: 54057 6091 N/A 60148
free: 6706 4604 N/A 11310
(Pss): 56549 1129 8385 66063
(shared dirty): 2128 1304 4964 8396
(priv dirty): 56496 892 8156 65544
Objects
Views: 0 ViewRoots: 0
AppContexts: 0 Activities: 0
Assets: 3 AssetManagers: 3
Local Binders: 5 Proxy Binders: 14
Death Recipients: 222
OpenSSL Sockets: 2
SQL
heap: 425 MEMORY_USED: 425
PAGECACHE_OVERFLOW: 81 MALLOC_SIZE: 50
DATABASES
pgsz dbsz Lookaside(b) Dbname
1 54 223 *.db
1 27 198 **.db
1 5 24 ***.db
1 11 56 ****.db
C:\>
答案 0 :(得分:0)
本机代码的内存使用量不受Java堆大小的限制,因此应用程序很容易超出该限制。虽然这确实意味着Android在后台运行时更有可能杀死你的应用程序,但只要你没有超过设备上的可用内存就不会有问题。
如果您在一部手机上看到不同的内存使用而不是另一部手机(并且两个应用程序正在以相同的方式进行交互),那么我猜测制造商在该特定手机上的自定义Android版本具有内存你正在触发泄漏。如果是这种情况,那么你无能为力。但是,查看您自己的代码只是为了确保内存泄漏不是您的错误。
话虽如此,现代设备上70MB并不值得担心。你应该在大多数手机上都是安全的,因为你坚持不到~150MB。