【问题标题】:OutOfMemoryError when writing to SharedPreferences file写入 SharedPreferences 文件时出现 OutOfMemoryError
【发布时间】: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


【解决方案1】:

OOM 错误可能发生在 App 中的任何位置。

它只是说:嘿,我试图分配一些东西,但我的内存不足。对不起。

这可能发生:您在应用程序中加载了一个非常大的图像,并且在 OOM 之前只剩下很少的可用字节:然后您有一个简单的解析器分配字符串和东西.. 可以去 OOM。

你的问题在别处:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    相关资源
    最近更新 更多