我想写一个Android应用程序,当它打开时,在20秒后调用一个方法,然后每10秒自动调用一次方法。
有什么想法吗?
您可以用一个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
您可以使用Timer,对于该实现,您可以像一样完成
new java.util.Timer().schedule(
new java.util.TimerTask() {
@Override
public void run() {
// your code here
}
},
5000
);
请检查以下代码。
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Enter your code
}
}, 0, 20000);//put here time 1000 milliseconds=1 second
希望这个代码能帮助你。
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();
如果您想在应用程序处于非活动状态的情况下进行工作,可以使用报警管理器(关闭)
它一直在运行,直到你不停下来。
这是完整的示例
url
http://javatechig.com/android/repeat-alarm-example-in-android
声明处理程序对象:
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秒执行与上述相同的操作,并使循环重复
希望这会有所帮助。。。感谢
您需要每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
}
});
}
您需要使用自定义处理程序来完成这项工作。以下是您需要的示例:
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);
}
}
使用计时器类
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();
}