1

私は最近 Java を使い始め、Android 開発を検討しています。私が作成した Java プログラムの 1 つを移植しようとしていましたが、Java タイマーを Android で同じように機能させるのに苦労しています。私は多くの投稿を読みましたが、ほとんどの場合、Timer ではなく Android で Handler クラスを使用する方が良いことが示されました。

これはJavaでの私のタイマーでした:

playTimer = new Timer(1000/model.getFPS(), new ActionListener() {
    public void actionPerformed(ActionEvent evt) {
        // do something
        ...
        if( finished everything ) playTimer.stop();
    }
});

そして、特定のボタンがクリックされたら、単に「playTimer.start()」を実行して開始します。

ご覧のとおり、ユーザーが必要な FPS を設定できるようにセットアップしました (Timer クラスの最初のパラメーターを 1000/model.getFPS() に設定するだけです)。

Androidでハンドラーを使用して同様のことをしようとしましたが、いくつかの問題があります。ハンドラー ティックが適切な間隔で起動していないようです。私が必要としているものと比較して、それらはかなり遅いようです。これは私がこれまでアンドロイドで行ったことです:

public void startTimer() {
    playHandler = new Handler();
    startTime = System.currentTimeMillis();
    playHandler.removeCallbacks(updateTimeTask);
    playHandler.postDelayed(updateTimeTask, 0);
}

private Runnable updateTimeTask = new Runnable() {
    public void run() { 
        // do something
        ...

        if( finished everything ) playHander.cancel();
        else {
            playHandler.postDelayed(updateTimeTask, 1000/model.getFPS());
        }
    }
};

半疑似コードですみません。誰でも光を当てることができますか?みんなありがとう。

4

3 に答える 3

2

以下のようにタイマーを使用できます。タイマーは毎秒実行され、カウンターがインクリメントされます。カウンター値をテキストビューに表示します。

タイマーは別のスレッドで実行されます。したがって、UI スレッドでテキストを設定する必要があります。

カウンターは 0 から 99 まで実行されます。99 を過ぎると、タイマーはキャンセルされます。のように不要な場合もタイマーをキャンセルしonPause()ます。

public class MainActivity extends Activity {
TextView _tv,tv2;
Timer _t;
int _count=0;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    _tv = (TextView) findViewById( R.id.textView1 );
    _t = new Timer();
    _tv.setText(R.string.app_name);
    _t.scheduleAtFixedRate( new TimerTask() {
            @Override
            public void run() {
                _count++;

                runOnUiThread(new Runnable() //run on ui thread
                 {
                  public void run() 
                  { 

                      _tv.setText(""+_count);
                      if(_count==99)
                      {
                          _t.cancel();
                      }
                 }
                 });
            }
        }, 1000, 1000 ); //change this value of 1000 to whatever you need.


}
@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();

    _t.cancel();
}  
}
于 2013-04-07T20:32:20.103 に答える
0

Android Timerを見てみましょう 。これには、必要なものがすべて含まれていると思います。1秒ごとにカチカチ音をたてて手早く仕上げるなど。
ここに TimerTask のセットアップ方法の例を示します

于 2013-04-07T20:21:42.260 に答える