我正在开发的应用程序需要读取一个大小可能在 1.5 到 3 MB 之间的 JSON 文件。打开文件并将数据转换为字符串似乎没有问题,但是当它尝试将字符串转换为 JSONArray 时,会抛出 OutOfMemoryErrors。异常看起来像这样:
E/dalvikvm-heap( 5307): Out of memory on a 280-byte allocation.
W/dalvikvm( 5307): Exception thrown (Ljava/lang/OutOfMemoryError;) while throwing internal exception (Ljava/lang/OutOfMemoryError;)
关于此的一件奇怪的事情是,崩溃仅在应用程序运行每 2 次或第 3 次时发生,这让我相信应用程序消耗的内存不会在每次应用程序关闭时被垃圾回收。
如能深入了解我如何解决此问题,我们将不胜感激。我对分块加载文件的想法持开放态度,但我不太确定完成此类任务的最佳方法是什么。
谢谢
最佳答案
当你说“第 2 次或第 3 次运行”时,你的意思是每次你都从一个新的模拟器开始吗?或者你的意思是离开应用程序然后回来? (例如按下主页,或调用 finalize() )
如果您指的是离开应用程序并重新启动它:
如果您尚未在 list 中设置 android:launchMode 以将 Activity 定义为 singleInstance 或 singleTask,则每次启动应用程序时都会创建一个新 Activity 并将其添加到 Activity 堆栈中。您可以很容易地在您的应用程序进程中运行多个 Activity 副本,从而占用大量内存。
如果它发生在第二次启动时,您仍然使用大量内存并且应该将其分解更多。
关于java - Android OutOfMemoryError - 加载 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2886599/