猫の手も借りたい

ソフトウエア開発者の多忙な生活

画面のレイアウトを縦と横で分けて、それぞれに最適化した方が良い画面もあります。カレアラは端末を回転させてもActivityが再生成されないようにして(そのように割り切って)いましたが、現在開発中のアプリは、Android Layout Cookbookを教科書にしてUIに力を入れ始めているので、きちんと回転対応した方が良い画面はそのようにしています。が、そうすると端末の回転でActivityが再生成されるため、厄介なことが起きます。はい、基本的な対応方法はLayout Cookbookにも書かれていますが、次のようなケースを考えると、いちいち対応するのはとっても大変です。

  • AlertDialogを表示してユーザーに選択をさせている最中に端末を回転させた。

  • 時間のかかる処理をAsyncTaskで行い、プログレスを表示している最中に端末を回転させた。


端末の回転で、縦・横画面に最適なレイアウトを提供したいのですが、上記のようなケースに対応するにはコストがかかり過ぎるなと思いました。で、ふとこう思いました。上記のような、都合の悪い状態では回転させなくてもいいのではないか。どうせ見ているのはAlertDialogかプログレスバーぐらいなのだから。で、それらを閉じたら自動で端末の状態に応じて回転すればいいじゃないか。無理かなーと思いつつ調べたらありました。その方法が。これを使って、都合の悪い状態に入る前に向きを固定し、そこから出たら回転可能に戻しました。僕としてはこれで満足です。AsyncTaskを使っている最中にActivityを再生成して元に戻すコードを書いて大きなバグを作り込むよりはよっぽどいいと思います。とにかく品質第一だし。(UIを良くしてForceCloseさせたら本末転倒、、、って言い訳っぽいなあ。でも僕はこの現実解が好きです。)

 
Android Layout Cookbookに書かれていることに影響を受けて、現在開発中の2本目のアプリはUIをターゲットユーザー向けに大幅に変更することにしました。この書籍、ソースコードが充実しているのでとても助かっています。書籍によっては、ダウンロードできるソースコードは「全て」ではなくて、書籍の内容の一部であることもあり、そう言う時はがっかりしますが、Android Layout Cookbookは見たところ全部入っています。で、これまで避けてきたUIのカスタマイズをまじめに始めています。(この書籍はたくさん売れると思います。)

で、AlertDialogのカスタマイズでつまづいています。それ自体の説明は書籍にはなく、こちらを参考に変更しているのですが、期待した結果になりません。うーん。どうしてだろう。OS2.2ぐらいだと、AlertDialogをテーマの変更ではいじれないのかな。

 

 
クラッシュレポート機能は、Googleのサーバー(Google document)にレポートを送信しますが、その仕様が変更になったそうです。そのため、クラッシュレポート(ACRA)のライブラリーが更新されました。これに伴い、カレアラを更新しました。1.04.0です。

 
今日書店に寄ったので「Android Layout Cookbook」を手に取り、役に立つと思ったので購入しました。Amazonには辛口のコメントもありましたが(読み辛いとか)、僕はそうは思いませんでした。あんざいさんの主張には迎合できないものもありますが、良い書籍だと思います。早速、今取り組んでいるアプリのUI関係で活用させてもらいました。

それから、著者のあんざいゆきさんのブログにはいつも、とてもお世話になっています。

 
致命的な問題があると思っているGalaxy S 2.2.1ですが、問題だと広く認識されていないようで、しない方がいいと思うのに、検索すると「最近アップデートしました」という文言が引っかかります。また、いろんなアプリの不具合報告で、Galaxy Sで設定が・・・というのも目にします。で、僕のGalaxy Sもとっても不便な状態で、特に開発中のソフトはアンインストールすることが多いのですぐにこの問題が発生します。持っている端末4台のうちOS2.2なのはこれだけのでとても困ります。

Webの記事によるとGalaxy Sは2.3にできるそうですが、ドコモがいつ開始するかはまだ分からない、ということです。この分だともう2.2.1を直す気はないのでしょうか。僕としては2.3になって直っていたらいいのですけど。(いや、直っていないなんてあり得ないでしょう。)でもねぇ、この問題、当事者は認識していますよね。2.2.1について何もアナウンスしないのはまずいと思うのですけどねぇ。(どうしてみんな騒がないのでしょう。)

 
謎の問題は、更新間隔を3時間にしていると起こることが分かりました。更新間隔を3時間にして使われていた方には不快な思いをさせてしまったかも知れません。ごめんなさい。

この問題はV1.03.0で修正しています。

 
長らく僕を悩ませていた、理解できない、再現できない問題の謎が解けました。その問題についてのACRAのクラッシュレポートが増えてきた(蓄積されてきた)ので、それだけを抽出して眺めたところ、全部、更新間隔が3時間でした。で、その設定で再現させることができました。3時間だけAndroidの仕様で更新時刻が正確です。このことが潜在的にあったバグを引き起こしていました。これまで更新間隔は短い方が問題を起こしやすいからと思い、3時間の設定は常用していませんでした。この件では反省すべき事がいくつもあります。

この問題も、ACRAに救われました。ACRAを実装していて本当に良かったです。

 
国内のXPERIA ARCユーザーで、朝7:00に問題を起こしている方がいることが、ACRAのレポートで分かっているのですが、その問題がどうして起こるのかが分かっていません。どうしても理解できず、再現もできず、でも何度もその問題を起こしているので、起こす方法があると思うのですが、起こせません。で、その問題は露見しないように回避策を入れているのですが、その回避策が働くのがそもそもおかしいので、何とか解明したいのですができていません。

もう1つ、最初のバージョンの頃からある謎の問題で、これも僕の環境では起きないのですが、「もうこれで起きるはずはないだろう」というコードに変えました。この問題はもう再発して欲しくないです。

どちらもACRAなしでは(Android 2.2からのクラッシュレポートではきっと役に立たず)何もつかめなかったろうと思います。
Android Marketで購入した有料アプリのライセンス管理で、Googleが標準で提供しているのがLVLですが、期待に反して、そしてドキュメントから読みとれる振る舞いと違って、機内モードで動かすと「ライセンスなし」になるようです。これ、有料版をリリースする前のテスト段階からそうだったのですが、正式にリリースしたら直るだろうと思っていました。が、どうやら違うようです。

こちらにその問題の指摘と回答があります。その回答をした人はGoogleに問題を報告していて、さらに、対策コードを公開してくれています。この実装は、「ライセンスあり」状態を無期限にキャッシュしますが、期限を設けなくてもこれで十分かな、と思いました。

1つ疑問なのは、LVLを使っている有料アプリはたくさんあると思うのに、そしてそれらは機内モードにしたらすぐに「ライセンスなし」になるのに(LVLがそのように応答します)、これを問題視している情報が少ないことです。それは僕の検索の仕方がヘタクソだからでしょうか。
4月中を目標にしていたのですが、品質的に正式版にしても良さそうな気がしてきたので、正式版を公開しました。試用版は大丈夫だと思うのですが、有料版はライセンス管理部分に不安があります。このライセンス管理の機能、公開前はどうしても試せることに限りがあるためです。開発者用のアカウントだと本当の振る舞いが試せないのと、そのアカウントでは購入できないので、別のアカウントで試すしかないです。