sensorsdata / sa-sdk-android

神策数据官方 Android 埋点 SDK,是一款轻量级用于 Android 端的数据采集埋点 SDK,包含代码埋点、全埋点、点击图和可视化全埋点功能。全埋点通过配合神策官方 Android 埋点插件来实现,神策数据官方 Android 埋点插件使用字节码插桩(ASM)的技术实现 Android 端的全埋点(无埋点、无码埋点、无痕埋点、自动埋点)。
http://opensource.sensorsdata.cn
Other
1.31k stars 434 forks source link

沒有記錄到 Error,造成 APP 閃退 #88

Closed FightJames closed 2 years ago

FightJames commented 3 years ago

Stack trace :

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)

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 image

在上述的 code 中,只有 catch Exception,但是錯誤的是 Error,會造成 APP crash,應該要改成 catch Throwable

dengshiwei commented 3 years ago

感謝您的反饋,我們會在後續版本中進行優化。

dengshiwei commented 2 years ago

@FightJames v5.4.3 版本中已经修复处理。