デジモノ狂想曲!

デジタルデバイスの活用方法を模索しています。
最近iPhoneを買いました。いいですねあれ!!
なんで今まで買わなかったんだろう・・・

.

2009年06月23日

Android で タイマー処理 を考えてみた


今日も android で遊んでました。

現在考えているプログラムで、100msくらいの単位で処理&画面更新を行いたかったので、その方法を調べてみました。

android のリファレンスをみると、java.util.Timer あたりが使えそうだったので、それに目星をつけてみました。

というわけで、簡単なテストアプリを作って試してみました。

テストアプリの仕様

テストアプリというわけで、タイマーの動作が分かるような感じで下記のようにしてみました。

  • 100msごとにint tickcount 値をカウントアップ
  • 画面に、int tickcount 値を表示

まあ、タイマの動作確認としては必要最低限ですね。

必要な情報

タイマを動かすためにイロイロ調べた情報&Try and Error でうまくいった処理をまとめときます。
ネットで調べた情報が主ですが、中には自己解釈なども含まれています。
とりあえず、このように解釈したらうまく動いた、と言うことなので参考程度にしておいて下さい。

  • java.util.Timerで定期的なタイマー処理を起動できる。
  • タイマー処理の実態は、android.os.Handler を用いて実装する。 
  • java.util.Timer
    • コンストラクタのTimer()には引数をtrueにする。そうすると、daemon thread.として動くようだ。
    • schedule()で実行する処理と起動感覚を設定。
      • long delay は初回起動時の遅延時間。単位はms(ミリ秒)
      • long periodは起動間隔。単位はms(ミリ秒)
      • taskには実行する処理を記述。ここでandroid.os.Handler に Runnable なオブジェクトを登録する。
  • android.os.Handler
    • まずはインスタンス化しておく。
    • post()で行いたい処理を登録。これでキューに登録されるようだ。
    • postに登録する処理は TimerTask::run() の中で Runnnable::run()を生成してそこで実装する。

実行結果

カウント値が100msごとに上がっていく様子が分かります。

20090622_TestForCapture01.png

ちゃんとカウントアップしてます。
だいたい、1秒で10カウント増えています。期待通りです。

20090622_TestForCapture02.png

ソースコード

見よう見まねで作ったコードです。
とりあえず、期待した処理は動いているようです。
後生のためにここに書き残しておきます。

package jp.hews.testforcyclicprocess;

import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class TestForCyclicProcess extends Activity {
    /** Called when the activity is first created. */
 int tickcount;
 Timer timer = null;   //タイマを定義
 TextView mDisplayText; //表示領域の定義

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //結果の表示先を設定
        mDisplayText = (TextView)findViewById(R.id.text_view);
        //カウント値の初期化
        tickcount = 0;
        //Timerを設定する
        timer = new Timer(true);
     final android.os.Handler handler = new android.os.Handler();
  timer.schedule(
   new TimerTask() {
    @Override
    public void run() {
     // TODO Auto-generated method stub
     handler.post( new Runnable(){
      public void run(){
             //結果出力用のテキストボックス
       tickcount++;
       StringBuffer buff = new StringBuffer();
       buff.append("now tick:");
       buff.append(tickcount);
       mDisplayText.setText(buff.toString());
      }
     });
    }
   }, 1000, 100);  //初回起動の遅延と周期指定。単位はms
    }
}






投稿: はせこう。 at 01:02 | Comment(0) | TrackBack(0) | Android
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/30001195

この記事へのトラックバック

ランキング投票!

RSS取得