2011-04-24 (日)
*ニコニコPlayer(仮) 0.1.14_p1
致命的っぽいバグを優先して色々修正.
以下メモ.
あとでソースを読んでみるつもりですが,画面回転時にListViewが一番下にスクロールしてしまうことがあるのって,何なのだろう.よく分からないので,onConfigurationChanged()で現在の位置を一旦取得して,setListAdapter()しなおしてから,位置を再設定するということをしている.
たまに動画の表示サイズがレイアウト変更に追従してくれない問題が再発してます.以前は自分でもってるVideoViewだったのでなんとかなりましたが,FlashPlayerが持ってるSurfaceViewは同じ方法ではいけなかった….一度,WindowManager上に何か追加してやればリサイズされるけど,どのタイミングでやればいいのかと,もうちょっとまともな方法がないかを探し中.
Caused by: java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.TimSort.mergeLo(TimSort.java:743) at java.util.TimSort.mergeAt(TimSort.java:479)
この例外の原因を調べていたら,どうもComparatorが矛盾した結果を返すとダメっぽい.
例えば
return a<b ? -1 : 1;
という値を返していたとすると,xとyの大きさが等しい場合,(a,b) = (x,y)のときは,x>yという結果を返し,(a,b) = (y,x) のときに x<yとなってしまう.
等しい場合は0とするか,大小は分かっても等号を実装するのが面倒な場合,前回と同じ結果を返すように工夫する必要があります.
flv対応したら,(仮)から(β)にしようと思ってたのだけど,もう(仮)もアプリ名の一部になってしまってるしこのままでいこう.特徴のない名前にしてしまったのがいけなかった.
あと,CalledFromWrongThreadExceptionがたまにおきてたのだけど,どうしても問題になりそうなところが見つからず,どうやらAdMobのSDKが原因のようだというところまでたどり着いた.4.0.4で直ったりするのかな.