在Eclipse中处理android项目时,我遇到以下代码的问题:
/
.
.
.
myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
TimerMethod();
}
}, 0, 1000);
/
.
.
.
private void TimerMethod()
{
this.runOnUiThread(Timer_Tick);
}
private Runnable Timer_Tick = new Runnable() {
public void run() {
Time_Between();
}
};
public void Time_Between (){
time_end = System.currentTimeMillis();
if ( ( time_end - time_start )/ 1000 > 30)
{
startActivity(i);
finish();
}
}
我希望它做的是检查经过的时间是否> 30,如果是,它应该打开另一个活动(i),并杀死当前的活动。然而,在30秒后,它会多次打开活动“i”而不是一次,就像无限循环一样。看起来旧的活动仍然在后台运行?我真的不知道原因。提前谢谢。
答案 0 :(得分:1)
if ( ( time_end - time_start )/ 1000 > 30)
一旦点击> 30没有什么可以阻止它仍然存在> 30.你的计时器仍然在运行,因此每当它计时检查IF语句并相应地执行时。
如果您希望在计时器的整个生命周期内只发生一次,请在开始新活动之前停止计时器。
如果您希望每隔30天连续发生这种情况,请在开始新活动之前重新启动计时器。
答案 1 :(得分:0)
Handler.postDelayed
是一种更有效的邮政检查方式。
试试这个:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(i);
finish();
}
}, 30 * 1000);