【发布时间】:2014-03-17 16:19:57
【问题描述】:
我发现了这个奇怪的 OutOfMemoryError,我想知道是否有其他人遇到过它。我稍微打破了 SharedPreferences 的规则,并将几个模型对象存储为字符串,但它们很小。
java.lang.OutOfMemoryError
at com.android.internal.util.FastXmlSerializer.(FastXmlSerializer.java:55)
at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:177)
at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:596)
at android.app.SharedPreferencesImpl.access$800(SharedPreferencesImpl.java:52)
at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:511)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
【问题讨论】:
-
这很奇怪,因为 sharedpreferences 实际上没有存储限制(字符串最大长度除外)。向我们展示你的实现。
-
在哪里得到 OOM 错误并不重要——它很可能是由于在应用程序的其他地方使用了太多内存而导致的,而你只是碰巧在稍后完全耗尽。做一个 hprof 看看你的内存在哪里被使用并检查你是否在任何地方有内存泄漏。
-
在编写 SharedPrefs 时总是发生 OutOfMemoryError(假设在应用程序的其他地方引起)难道不是一个巨大的巧合吗?
-
您是否将大地图保存到 SharedPreferences?
-
没有地图,虽然json字符串在检查后接近2K。经过反思,我倾向于同意 Gabe 和 Philipp 的观点,这可能是 OOM 的症状而不是原因。
标签: android out-of-memory sharedpreferences