InflateException | エモンのブログ(スマホアプリ作成日記)

エモンのブログ(スマホアプリ作成日記)

エモンのブログです。

GooglePlayとAppStoreにアプリをリリースしてます。
「詰将棋パラダイス」4500問無料で公開。
「みんなのしょうぎ」投票型の将棋対局。いずれもソーシャルアプリなので、ソーシャルゲーム作成に興味があるかたは是非ご覧ください。

アンドロイドアプリを作っていて
android.view.InflateException: Binary XML file line #XX
というエラーでクラッシュした。しかも毎回でもなく、端末によって出たり出なかったりする。
並行してOut of Memoryも出ていた。

android.view.InflateExceptionはレイアウトxmlの読み込みエラーである。
端末Aでクラッシュし、別の端末Bではクラッシュしていなかったのでxmlの記述の仕方にミスがあるとは思えなかったが、よく見ると異なるxml間で同じIDをつけているViewがあった。これが原因の一端であった。

原因は、
メモリが足りず画面遷移時にレイアウトxmlを読み込みが極端に遅くなると、過去のActivityのxmlを引きずっているのではないか?その際に異なるxml間で同じIDをつけているとクラッシュする。
(だから平行してOut Of Memoryが出ているときにだけこのクラッシュの仕方が起きる)
と考えた。

対策
Out Of Memoryをなくそう。
全てのxmlでIDを違うものにしよう。
...へへ、なんだ当たり前のことじゃないか。