4

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 +の数やユーザーが増加したためです)。

誰かが似たようなことに遭遇しましたか?

+2

Parcelableクラスを投稿できますか? –

+1

"私たちはカスタムパーセル可能なものを渡しますが、大規模なユニットテストはマーシャルとアンマーシャルのために渡されています" - これはどのように使っていますか?この「意図」はどこから来ているのですか?特に、それが別のプロセス(例えば 'PendingIntent'から' AlarmManager')によって保持されている 'Intent 'である場合、[カスタム' Parcelable'クラスは危険なビジネスです](https://commonsware.com/blog/2016/07/ 22/be-careful-where-you-use-custom-parcelables.html)。 – CommonsWare

+0

ちょっと@CommonsWare、私はちょうど前にあなたの記事を読んで行って、あなたのコメントを見た;)。返信は爆発だった。あなたの質問に答える:それはPendingIntentでもAlarmManagerでもなく、アプリケーションがフォアグラウンドにいるときにインテントを他のものに渡す1つのアクティビティです。私はこのクラッシュで記録されたセッションを見てきました。あなたのアドバイスはとにかく、おかげで有望に見えます。私はまずそれを試してみると思います。 – fada21

答えて

0

更新は遅くなりましたが、これ以上はありません。クラッシュは消え去った。私が使用した解決策はここにあります:How to marshall and unmarshall a Parcelable to a byte array with help of Parcel?

正直言って、私はいくつかの不要なパーセル化を取り除いてくれました。私のアプリからも分かりませんが、これは以前の解決策が関係していると思います。

関連する問題