如何在Android中每20秒调用一次方法

10

我想编写一个Android应用程序,在打开后20秒钟调用方法,然后每10秒自动调用方法。

有什么想法如何继续进行吗?

9个回答

30

你可以使用单个 Handler 来完成它,类似这样:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
   @Override
   public void run() {
       //Do something after 20 seconds
   }
}, 20000);  //the time is in miliseconds

为了每隔10秒钟重复相同的操作,您可以在同一个方法中添加以下行:

并且在这个方法中重复相同的内容,您可以添加以下代码:

handler.postDelayed(this, 10000);

就像这样:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
   @Override
   public void run() {
       //Do something after 20 seconds
       handler.postDelayed(this, 10000);
   }
}, 20000);  //the time is in miliseconds

2
20秒是20,000毫秒,而不是200,000。 - Elias
1
处理程序现已过时。 - Paula Livingstone

2
您可以使用Timer,具体实现如下:
new java.util.Timer().schedule( 
    new java.util.TimerTask() {
        @Override
        public void run() {
            // your code here
        }
    }, 
    5000 
);

2
CountDownTimer cdt;

cdt = new CountDownTimer(timeint * 60 * 1000, 1000) {
    @Override
    public void onTick(long millisUntilFinished) {          
        Log.i(TAG, millisUntilFinished " millis left");
    }

    @Override
    public void onFinish() {
        Log.i(TAG, "Timer finished");
    }
};

cdt.start();

2
请查看下面的代码。
new Timer().scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
 // Enter your code
}
            }, 0, 20000);//put here time 1000 milliseconds=1 second

希望这段代码能对你有所帮助。

1
声明一个处理程序对象:
Handler myHandler = new Handler();
myHandler.postDelayed(new Runnable() {
   @Override
   public void run() {
       //Do something after 20 seconds
    //call the method which is schedule to call after 20 sec
   }
}, 200000);  //the time is in miliseconds

-再次重复10秒钟以上的操作,与上述步骤相同,并进行循环重复。

希望这对你有所帮助...谢谢


请提供以下代码: " -再次执行与上述相同的操作,持续10秒,并创建循环以重复执行。" - iOSAndroidWindowsMobileAppsDev
@Anon 将上述代码放入一个方法中,在 run() 内部调用该方法。即从外部调用此方法一次,然后每隔 10 秒钟它将自己调用一次。对于 10 秒钟的重复,将 20000 替换为 10000。 - sahu

1
你需要每隔20秒调用一次Handler,并在每次通过期间更新UI。
代码应该像这样:
final Handler handler = new Handler();//class variable
int count = 0;

handler.post(new Runnable() {

  @Override
  public void run() {

    updateCounter(count++);

    if(count < (10*20000)) { 

        handler.postDelayed(this, 20000);

    }

  }

});

更新计数器的函数:

private void updateCounter(final int count) {
  runOnUiThread(new Runnable() {
    @Override
    public void run() {
        // you have the seconds passed
        // do what ever you want
    }
  });
}

1

0
使用计时器类。
private  CountDownTimer countDownTimer;

private void startTimer(final Context context) {

    if (countDownTimer != null) {
        countDownTimer.cancel();
        countDownTimer = null;
    }

    countDownTimer = new CountDownTimer(20 * 1000, 1 * 1000) {

        public void onTick(long millisUntilFinished) {

            //
        }

        public void onFinish() {



           yourMethod();



                startTimer(context);

            }
        }

    }.start();
}

0
你需要使用自定义的处理程序来完成这项工作。以下是您所需的示例:
public class Main extends Activity  { 
  private TextView txtStatus;
  private RefreshHandler mRedrawHandler = new RefreshHandler();

  class RefreshHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
      Main.this.updateUI();
    }

    public void sleep(long delayMillis) {
      this.removeMessages(0);
      sendMessageDelayed(obtainMessage(0), delayMillis);
    }
  };

  private void updateUI(){
    int currentInt = Integer.parseInt((String) txtStatus.getText()) + 10;
    if(currentInt <= 100){
      mRedrawHandler.sleep(10000);
      txtStatus.setText(String.valueOf(currentInt));
    }
  }

  @Override 
  public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main);
    this.txtStatus = (TextView) this.findViewById(R.id.txtStatus);

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
    @Override
      public void run() {
          updateUI();
        }
    }, 20000);  

  } 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接