私にはカスタムがView
あり、時々クラッシュが報告されます:
Caused by: java.io.NotSerializableException: com.myapp.views.MyCustomView
Fragments
常に使用する必要がなく、簡単に使用できるように、このビューのメンバーを宣言した人はほとんどいませんfindViewById
。transient
また、この動作を防ぐためにメンバー ビューを宣言しようとしました。
なぜこれが起こっているのかわからないので、いくつかのコードを投稿するのは非常に困難ですが、基本的なアーキテクチャは次のとおりです。
Fragment
xml レイアウトでMyCustomView
which を動的に作成し、それFrameLayout
に追加するFragment
MyCustomView
ポインターを開始View
し、使用のためにメンバーとして別のメンバーに渡す
BugSense
また、クラッシュ ライブラリを使用してクラッシュ レポートを取得しています。
更新: どういうわけか、これは を実装する私の 1 つのデータ クラスに接続されていますSerializable
。パッケージを逆コンパイルすると、クラッシュ トレースも実際にはデータ クラスであることが示されます。
java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.myapp.f.y)
そしてMyCustomView
、そのオブジェクトのメンバーを持っています。したがって、Serializable
オブジェクトはシリアル化されており、どういうわけMyCustomView
かそれ自体もシリアル化しようとしていますか?
アップデート:
1 日平均 2,000 人のユーザーのクラッシュ数は、1 日あたり約 10 件です。ホームが押されたときのトレース:
android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2302)
システムがシリアル化を試みますが、一部の操作またはアニメーションがまだ進行中であり、システムがシリアル化しようとしているというスレッドの問題が発生している可能性がありますかView
?
アップデート:
これは、2.x プラットフォーム デバイスでのみ発生するようです。