【发布时间】:2021-08-21 13:08:06
【问题描述】:
我在 Google Play 上看到过高的崩溃率 > 3.5%,但其中超过 99% 是由仅影响一位用户的一次崩溃造成的。这是崩溃:
java.lang.IllegalStateException:
at android.app.SharedPreferencesImpl.awaitLoadedLocked (SharedPreferencesImpl.java:265)
at android.app.SharedPreferencesImpl.edit (SharedPreferencesImpl.java:349)
at crc646a240b12c1f538a7.BBarActivity.n_onCreate (Native Method)
at crc646a240b12c1f538a7.BBarActivity.onCreate (Unknown Source)
at android.app.Activity.performCreate (Activity.java:7169)
at android.app.Activity.performCreate (Activity.java:7160)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3001)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3156)
at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1864)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:205)
at android.app.ActivityThread.main (ActivityThread.java:6996)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:884)
Caused by: java.lang.OutOfMemoryError:
at java.util.Arrays.copyOf (Arrays.java:3260)
at java.lang.AbstractStringBuilder.ensureCapacityInternal (AbstractStringBuilder.java:125)
at java.lang.AbstractStringBuilder.append (AbstractStringBuilder.java:605)
at java.lang.StringBuilder.append (StringBuilder.java:191)
at org.kxml2.io.KXmlParser.readValue (KXmlParser.java:1454)
at org.kxml2.io.KXmlParser.next (KXmlParser.java:401)
at org.kxml2.io.KXmlParser.next (KXmlParser.java:321)
at com.android.internal.util.XmlUtils.readThisValueXml (XmlUtils.java:1427)
at com.android.internal.util.XmlUtils.readThisMapXml (XmlUtils.java:830)
at com.android.internal.util.XmlUtils.readThisValueXml (XmlUtils.java:1481)
at com.android.internal.util.XmlUtils.readValueXml (XmlUtils.java:1397)
at com.android.internal.util.XmlUtils.readMapXml (XmlUtils.java:740)
at android.app.SharedPreferencesImpl.loadFromDisk (SharedPreferencesImpl.java:153)
at android.app.SharedPreferencesImpl.access$000 (SharedPreferencesImpl.java:54)
at android.app.SharedPreferencesImpl$1.run (SharedPreferencesImpl.java:122)
阅读上面这似乎是由于内存不足。由于这只发生在这个用户身上,很难说到底是什么问题,理论上可能是一些存储的偏好变得疯狂并获得了一些令人难以置信的长值,尽管这只是一个理论点,我不明白它是怎么回事可能发生在代码中。他的手机是只有 2 GB 内存的 LGE LG K40,这肯定会有所帮助。最后这发生在主屏幕上,所以它可能是在启动时发生的,并且不知何故他的设备没有为第一次启动释放足够的内存,所以他必须多次启动应用程序直到发生这种情况。这是一个非常频繁的用户,他似乎给该应用打了 5 颗星。
问题在于,此统计数据可能会影响应用的排名,因此当前状态是不可接受的。但我不确定可以做什么。
我在访问首选项时尝试做一些尝试捕获以最终解决崩溃问题,但它似乎没有帮助。
我想到的唯一一件事就是在 Google Play 上排除这种特定型号的设备。我认为在这种情况下,用户将无法再接收更新。虽然 Google Play 仍会报告过高的崩溃率,但至少在最新版本中不会发生这种情况,并且可以合理地预期 Google 在对应用程序进行排名时不会计算旧版本应用程序中的崩溃率。
有人遇到过类似情况吗?有一些编码解决方案吗?或者有什么解决方法可以阻止 Google Play 上出现这种过高的崩溃率报告?
【问题讨论】: