Tôi đã nhận được báo cáo sự cố lạ sau đây cho Ứng dụng Android của tôi từ Google Play (lưu ý số lượng phân bổ so với dung lượng trống có sẵn) -java.lang.OutOfMemoryError trên Android 5.0, gây ra bởi phân bổ 16k khi 5M có sẵn
java.lang.OutOfMemoryError: Failed to allocate a 16396 byte allocation with 5746272 free bytes and 111MB until OOM
at com.android.internal.util.FastXmlSerializer.<init>(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)
Tôi biết một số câu hỏi OutOfMemoryError trên SO, nhưng dường như không có câu hỏi nào trong số đó do phân bổ byte nhỏ hơn nhiều so với không gian trống khả dụng.
Người dùng đang sử dụng Galaxy S5 trên Android 5.0 và báo cáo rằng các sự cố như vậy xảy ra khi chơi trò chơi (và trò chơi nào không quan trọng) - tôi nhận thấy điều này lặp lại bất cứ khi nào anh ấy/cô ấy đang sử dụng ứng dụng bộ nhớ khác trong nền trước và dịch vụ nền của Ứng dụng của tôi được lên lịch để chạy. Là một báo cáo trên Google Play, tôi không có phương tiện nào khác để có thêm chi tiết.
Câu hỏi của tôi là, điều gì có thể khiến điều này xảy ra và mọi biện pháp mà ứng dụng có thể thực hiện để tránh điều đó?
Một số nền (trong trường hợp này có liên quan): sự cố ở trên là từ dịch vụ nền được lập lịch định kỳ của Ứng dụng của tôi, không liên quan đến bất kỳ giao diện người dùng/bitmap nào. Tất cả những gì nó làm là tải xuống dữ liệu từ máy chủ và cập nhật cơ sở dữ liệu/trạng thái. Nó chạy mà không có bất kỳ vấn đề trong máy 5 năm tuổi với RAM ít hơn nhiều, và nên rất nhẹ trên bộ nhớ theo các tiêu chuẩn của điện thoại Android hiện đại. Ví dụ trên xảy ra tại một điểm sau khi cập nhật cơ sở dữ liệu và dịch vụ đang viết trạng thái cập nhật cho tùy chọn được chia sẻ.
Chỉnh sửa: chỉ cần đọc OutOfMemoryError in android on allocation 4Mb when 10Mb is free được liên kết với câu hỏi này sau khi đăng, nhưng nó chỉ xuất hiện khá không thể xảy ra mà không gian trống có sẵn có thể bị phân mảnh trong trường hợp này? Có nguyên nhân nào khác không?
https://github.com/facebook/fresco/issues/404 https://github.com/facebook/fresco/issues/159 –