2011年2月17日木曜日

android の設計がいろいろ気になる

 PreferenceActivityが、使いでが無いのである。個々の値が表示されないので、ユーザは何が設定されているか脳内に記憶しとけという事らしい。ReadOnly の項目が無いくさいので、結局自前でダイアログを書いた方がマシってもんである。UIに関しても、iOS と比較すると圧倒的なデザイン力の差が出ていると断言できます。

 Activity の onResume と onPause が Activity を切り替える時に発生するので、このタイミングで unbindService したり、bindService してると、onActivityResult のイベント時に、サービスの準備が整っていなくて、どはまりするという…。いやはや、参りますね…。

 こういう事ばかり経験していると、以下のようなバッドノウハウが当たり前になってくる…。
  Handler handler_ = new Handler();
  public void postHoge() {
    handler_.post( new Runnable() {
      public void run() {
         // メインスレッドで実行したいコード
         hoge();
      }
    });
  }

  new Thread(new Runnable() {
    public void run() {
      // 1秒後に、Looper のメッセージキューへハンドラが投入される
      // この1秒という数字には、何の根拠も無い。
      // 9割方は、うまく動作するだろう。しかし、稀にエラーを引き起こすだろう。
      Thread.sleep( 1000 );
      postHoge();
    }
  }).start();

 もちろん、こんな根拠の無いコードは書かない。ただし、何かウェイトを入れなければならない場合には、関数 hoge() のコード内から、状況を確認した上で、Thread.sleep を駆使して、postHoge() するようなコードは、十分考えられる。ただし、状況が改善されるのが、異なるスレッドからによる場合に限定される。

0 件のコメント: