getIntent().getExtras()
コールのクラッシュ数が増加していることがわかりました。これは断続的なものであり、私たちはそれを再現することはできません。Intentから取得したパーセルがクラッシュする
クラッシュは2種類に来る:onResume() {... 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)
は、本質的です。私たちはバンドルがnullではないが、その前にクラッシュするかどうかをチェックします。
私たちはカスタムパーセル可能ですが、大規模なユニットテストは、マーシャリングとアンマーシャリングのために渡しています。
これらのクラッシュの面白い統計は、Android 6+(クラッシュの95%で記録されたセッションの72%がそこで発生する)で主に発生するということです。また予期せず、サムスンのデバイスでクラッシュすることはめったにありません(そのメーカーではクラッシュの発生率はわずか10%です)。
このクラッシュは、クラッシュ傾向がアプリクラッシュレートの0.15%に上昇します(おそらく、API23 +の数やユーザーが増加したためです)。
誰かが似たようなことに遭遇しましたか?
Parcelableクラスを投稿できますか? –
"私たちはカスタムパーセル可能なものを渡しますが、大規模なユニットテストはマーシャルとアンマーシャルのために渡されています" - これはどのように使っていますか?この「意図」はどこから来ているのですか?特に、それが別のプロセス(例えば 'PendingIntent'から' AlarmManager')によって保持されている 'Intent 'である場合、[カスタム' Parcelable'クラスは危険なビジネスです](https://commonsware.com/blog/2016/07/ 22/be-careful-where-you-use-custom-parcelables.html)。 – CommonsWare
ちょっと@CommonsWare、私はちょうど前にあなたの記事を読んで行って、あなたのコメントを見た;)。返信は爆発だった。あなたの質問に答える:それはPendingIntentでもAlarmManagerでもなく、アプリケーションがフォアグラウンドにいるときにインテントを他のものに渡す1つのアクティビティです。私はこのクラッシュで記録されたセッションを見てきました。あなたのアドバイスはとにかく、おかげで有望に見えます。私はまずそれを試してみると思います。 – fada21