Android1.6でHomeを回転させるとウィジェットが強制終了する
Android端末のなかには、Android Dev Phone1などのようにHomeが回転する機能を持つものがある。HT-03Aでも、アプリケーションを導入すれば回転させられるようになるらしい。また、エミュレータもCtrl+F12キーで回転させられる。
AppWidgetを作成している過程で、回転を行うとウィジェットが以下の例外によって強制終了する現象が発生した。
java.lang.ClassCastException: android.view.AbsSavedState$1
at com.android.launcher.Workspace.onRestoreInstanceState(Workspace.java:903)
Issue 3981: ClassCastException in the Launcher with certain widgets on Donut/master によると、Android1.6のバグだそうだ。
上記のレポートによると、発生する条件は6個を超えるidを動的に生成、つまりlayoutのxmlで
<Button android:id="@+id/ok_button"
のように、idを@+id/で設定している場合に起こるそうだ。
従って暫定対応策としては、idを自分で定義せず、あらかじめandroid.R.idクラスで定義されているものを用いることになる。上記のような箇所を、例えば
<Button android:id="@android:id/addToDictionary"
のように、あらかじめ定義されているandroid.R.id.addToDictionaryに置き換えればよいらしい。
この暫定対応策の問題は以下の通り。
- idと実際のオブジェクトの対応付けが分かりづらくなる。
- 上記の例では、ボタンにaddToDictionaryというidを割り当てているが、後から見てすぐ理解できるだろうか。
- あらかじめ定義されているid数は限りがある。
- 40個程度しか定義されていないので、これを超えるウィジェットを持つAppWidgetは作成できない。
冒頭に記載したとおり、日本で発売されている唯一の端末であるHT-03AはHomeは縦方向固定で回転できないため、あまり気にする必要は無いのかもしれない。
参考:
« Androidでのミュージックファイルアートワーク(カバーアート)仕様 | トップページ | Android1.6ではandroid:updatePeriodMillisの最小値は1800000 »
この記事へのコメントは終了しました。
« Androidでのミュージックファイルアートワーク(カバーアート)仕様 | トップページ | Android1.6ではandroid:updatePeriodMillisの最小値は1800000 »
コメント