0

毎秒タイマーを表示したい。20 秒後に、そのアクティビティが自分自身を呼び出すようにします。

しかし、タイマーを表示しないと、希望どおりに20秒間待機しますが、タイマーを表示するコードを実装するとすぐに開始され、突然停止します。

これが私のコードです。私を助けてください。

public class MainActivity extends Activity { 
public int time=20;
Button end;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Thread timerdisp = new Thread(){
        TextView tv = (TextView) findViewById(R.id.timer);

        public void run(){
            try{    
                sleep(1000); // sleep for 1 seconds
                tv.setText(String.valueOf(time));
                time-=1;
                if(time==0){
                    startActivity(new Intent(MainActivity.this,MainActivity.class));                        
                }
                run();
            }
            catch (InterruptedException e){
                e.printStackTrace();
            }
        }
    }; 
    timerdisp.start();
    );
}
4

4 に答える 4

2

Android はCountDownTimerのより優れた機能を提供します。それを使用する必要があるかもしれません。多くの組み込みメソッドを提供し、デフォルトでバックグラウンド スレッドで実行されるためです。

メソッドを使用onFinish()して、アクティビティへの呼び出しを実行できます。

これは同じ例です。

于 2013-05-22T07:22:48.817 に答える
-1

以下のコードを使用して、20 秒ごとに関数を呼び出します。

private Timer timer;
TimerTask refresher;                 

timer = new Timer();    
refresher = new TimerTask() {
  public void run() {
                            // your code to call every 20 seconds. 
                     };
                 };
// first event immediately,  following after 20 seconds each
timer.scheduleAtFixedRate(refresher, 0,1000*20); 

時刻を表示するには、以下の行を使用します。

package com.example.test;
public class MainActivity extends Activity {

private Long startTime;
public native String getLastShotName();
public native String colorNormal();
public native String flipImage();
public native String forceInvertColor();
public native String getLastTitle();
public native String myMethod();
boolean mbFlip = false;
private Timer timer;
private Handler handler = new Handler();  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);           
          TimerTask refresher;
             startTime = System.currentTimeMillis();
             handler.removeCallbacks(updateTimer);
             handler.postDelayed(updateTimer, 1000);
    }
    @Override
    protected void onResume() {
        super.onResume();
         handler.postDelayed(updateTimer, 1000);
    }         
    private Runnable updateTimer = new Runnable() {
                  public void run() {
                      final TextView time = (TextView) findViewById(R.id.textView1);
                      Long spentTime = System.currentTimeMillis() - startTime;                  
                      Long minius = (spentTime/1000)/60;                          
                      Long seconds = (spentTime/1000) % 60;
                      time.setText(minius+":"+seconds);
                      handler.postDelayed(this, 1000);
                  }
              };
}         
于 2013-05-22T07:17:00.950 に答える