我收到了来自Google Play的Android应用程序的以下奇怪崩溃报告(请注意分配数量与可用空间) -
java.lang.OutOfMemoryError: Failed to allocate a 16396 byte allocation with 5746272 free bytes and 111MB until OOM at com.android.internal.util.FastXmlSerializer.(FastXmlSerializer.java:55) at com.android.internal.util.XmlUtils.writeMapXml(XmlUtils.java:183) at android.app.SharedPreferencesImpl.writeToFile(SharedPreferencesImpl.java:597) at android.app.SharedPreferencesImpl.access$800(SharedPreferencesImpl.java:51) at android.app.SharedPreferencesImpl$2.run(SharedPreferencesImpl.java:512) at android.app.SharedPreferencesImpl.enqueueDiskWrite(SharedPreferencesImpl.java:533) at android.app.SharedPreferencesImpl.access$100(SharedPreferencesImpl.java:51) at android.app.SharedPreferencesImpl$EditorImpl.commit(SharedPreferencesImpl.java:455) at com.headuck.headuckblocker.bj.a(Unknown Source) at com.headuck.headuckblocker.UpdateService.e(Unknown Source) at com.headuck.headuckblocker.UpdateService.a(Unknown Source) at x.a.onHandleIntent(Unknown Source) at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.os.HandlerThread.run(HandlerThread.java:61)
我知道关于SO的一些OutOfMemoryError问题,但似乎没有一个是由比可用空闲空间小得多的字节分配引起的.
用户在Android 5.0上使用了Galaxy S5,并且报告说在玩游戏时会发生这样的崩溃(以及哪些游戏无关紧要) - 我认为这种情况会在他/她在前台使用另一个内存密集型应用时再次发生我的应用程序的后台服务计划运行.作为Google Play报告,我没有其他方法可以获取更多详细信息.
我的问题是,什么可能导致这种情况发生,以及应用程序可以采取哪些措施来避免它?
一些背景(如果这是相关的):上面的崩溃来自我的App的定期安排的后台服务,它不涉及任何UI /位图.它所做的就是从服务器下载数据并更新数据库/状态.它在没有任何问题的情况下运行,具有更少内存的5年旧机器,并且应该在现代Android手机的标准上非常轻松的内存.上述错误实例发生在数据库更新之后的某个时刻,并且服务正在将更新状态写入共享首选项.
编辑:刚刚在分配4Mb时在android中读取OutOfMemoryError,当10Mb是免费的,并且在发布后链接到这个问题,但是在这种情况下可用的可用空间可能如此碎片似乎很不可能?还有其他可能的原因吗?