Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 1014 byte allocation with 16777120 free bytes and 167MB until OOM; failed due to fragmentation (required continguous free 65536 bytes for a new buffer where largest contiguous free 57344 bytes)
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:133)
at java.lang.StringBuilder.append(StringBuilder.java:124)
at org.json.JSONStringer.string(JSONStringer.java:344)
at org.json.JSONStringer.value(JSONStringer.java:252)
at org.json.JSONObject.writeTo(JSONObject.java:720)
at org.json.JSONStringer.value(JSONStringer.java:237)
at org.json.JSONObject.writeTo(JSONObject.java:720)
at org.json.JSONObject.toString(JSONObject.java:689)
at com.sensorsdata.analytics.android.sdk.data.EventDataOperation.insertData(EventDataOperation.java:45)
at com.sensorsdata.analytics.android.sdk.data.DbAdapter.addJSON(DbAdapter.java:69)
at com.sensorsdata.analytics.android.sdk.AnalyticsMessages.enqueueEventMessage(AnalyticsMessages.java:122)
at com.sensorsdata.analytics.android.sdk.AbstractSensorsDataAPI.trackEventInternal(AbstractSensorsDataAPI.java:1466)
at com.sensorsdata.analytics.android.sdk.AbstractSensorsDataAPI.trackEvent(AbstractSensorsDataAPI.java:677)
at com.sensorsdata.analytics.android.sdk.SensorsDataAPI$10.run(SensorsDataAPI.java:1466)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Stack trace :
Code : https://github.com/sensorsdata/sa-sdk-android/blob/master/SensorsAnalyticsSDK/src/main/java/com/sensorsdata/analytics/android/sdk/data/adapter/EventDataOperation.java#L39-L51
在上述的 code 中,只有 catch Exception,但是錯誤的是 Error,會造成 APP crash,應該要改成 catch Throwable