处理程序发布延迟 - 每秒打印一次内容



我想使用handler打印当前秒。我录制了一个视频,精确10 seconds,并希望每秒设置一次TextView的文本。

录制 10 秒的工作原理是这样的:

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
           stopRecordingVideo();
    }
}, 11000);  // don't know why 11000 but it only works this way

10 秒后,stopRecordingVideo()执行方法。那么,如何每秒更改文本视图的文本呢?

工作答案:

int t = 0;
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        t++;
        textView.setText(getString(R.string.formatted_time, t));
        if(t<10) {
            handler.postDelayed(this, 1000);
        }
    }
}, 1000);

formatted_time是这样的:

<string android:name="formatted_time">%d seconds</string>

要每秒打印文本,可以使用 CountDownTimer。但是,如果您想通过以下代码实现此目的:

void startTime(){
    //Post handler after 1 second.
    handler.postDelayed(runnable, 1000);
}
int totalDelay=0;
Handler handler = new Handler();
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        totalDelay++;   
        if(totalDelay<=10){
            //If total time is less then 10 second execute handler again after 1 second
            handler.postDelayed(runnable, 1000);
        }
        textView.setText(totalDelay+" Second");
    }
};

试试这个,基本上在工作线程中做增量,但更新文本视图是由main的线程处理程序完成的。

 Thread worker= new Thread(new Runnable() {
         @Override
         public void run() {
            for (int i = 0; i < 10; i++) {
               try {
                  TimeUnit.SECONDS.sleep(1);
               } catch (InterruptedException e) {
                  e.printStackTrace();
               }
             // stop recording after 10 seconds
               if (i == 9) {
                  handler.post(new Runnable() {
                     @Override
                     public void run() {
                        stopRecordingVideo();
                     }
                  });
               }
              else{
                   // set text for each second
                  handler.post(new Runnable() {
                     @Override
                     public void run() {
                        textView.setText(String.valueOf(i+1));
                     }
                  });
               }
            }//ends for()
     worker.start()

最新更新