在我们应用程序的分析中,我们注意到getIntent().getExtras()调用的崩溃次数有所增加。这是断断续续的,我们无法复制。

崩溃有两种味道:

12  Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.os.Parcel.dataSize()' on a null object reference
13  at android.os.BaseBundle.<init>(BaseBundle.java:126)
14  at android.os.Bundle.<init>(Bundle.java:102)
15  at android.content.Intent.getExtras(Intent.java:5685)


12  Caused by: java.lang.IllegalArgumentException
13  at android.os.Parcel.nativeAppendFrom(Native Method)
14  at android.os.Parcel.appendFrom(Parcel.java:458)
15  at android.os.BaseBundle.<init>(BaseBundle.java:126)
16  at android.os.Bundle.<init>(Bundle.java:102)
17  at android.content.Intent.getExtras(Intent.java:5685)

检索代码本质上如下onResume() {... getIntent().getExtras() ...}。我们检查 bundle 包中是否不为null,但在此之前崩溃。

我们确实通过了可自定义的可打包包裹,但通过了大量的单元测试以进行封送和拆组。

这些崩溃的有趣统计数据是它主要发生在Android 6+上(记录的 session 中有72%发生了崩溃,其中95%发生了崩溃)。同样,意外地,崩溃很少在三星设备上发生(记录的 session 中有73%的 session 发生故障,而该制造商只有10%的崩溃发生)。

该崩溃以上升趋势持续约0.15%的应用崩溃率(可能是因为API23 +上的用户数或用户增加)。

任何人都遇到过类似问题或已经有解决方案了吗?

最佳答案

更新较晚,但总比没有好。崩溃消失了。我使用的解决方案可以在这里找到:How to marshall and unmarshall a Parcelable to a byte array with help of Parcel?

老实说,我从我们的应用程序中删除了一些不必要的拆分和取消拆分,这可能也有所帮助,但我认为前一种解决方案是相关的。

08-25 14:40
查看更多