Android 如何为forloop中的每个循环设置计时器?
为每个循环设置计时器意味着如果一个数组中有3个项目,则可以访问我们需要的CallForLoop。我想要的是,当第一个循环运行时,它应该运行到一个特定的时间。然后,第二个循环以给定的特定时间运行。我已经尝试过处理程序的延时,但它不起作用。在处理程序中,所有循环一次运行,但在特定时间后执行。我不知道如何设置每个循环的计时器Android 如何为forloop中的每个循环设置计时器?,android,for-loop,timer,Android,For Loop,Timer,为每个循环设置计时器意味着如果一个数组中有3个项目,则可以访问我们需要的CallForLoop。我想要的是,当第一个循环运行时,它应该运行到一个特定的时间。然后,第二个循环以给定的特定时间运行。我已经尝试过处理程序的延时,但它不起作用。在处理程序中,所有循环一次运行,但在特定时间后执行。我不知道如何设置每个循环的计时器 { "tp_id": 85, "id": 15, "therapy_type": 1, "mode": 0, "level": 5,
{
"tp_id": 85,
"id": 15,
"therapy_type": 1,
"mode": 0,
"level": 5,
"duration": 7
},
{
"tp_id": 85,
"id": 16,
"therapy_type": 2,
"mode": 3,
"level": 4,
"duration": 1
},
{
"tp_id": 85,
"id": 17,
"therapy_type": 1,
"mode": 3,
"level": 4,
"duration": 1
}
我正在访问上述数组中的持续时间值,并希望使用特定的持续时间运行每个循环。我试过拖延时间,但没有按我想的那样工作
for(int i=0;i<type.size();i++){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.e("chekkk",""+i);
}
}, duration.get(i) * 1000);
}
for(inti=0;i尝试发布可运行文件本身
//Handler should be saved in object or other way.
//You must remove all timers and destory it exciplit.
//Otherwise the Handler and Timers will be leak.
Handler mTimerHandle = new Handler();
Long startTime = System.currentTimeMillis();
//...
for(int i=0;i<type.size();i++){
Runable timer; //You can save it if you want to cancel it.
long timerDuration = long(duration.get(i) * 1000); //make a variable in for-loop's scope instead i;
timer = new Runnable() {
@Override
public void run() {
Log.e("chekkk",""+i);
long nextEmit = (System.currentTimeMillis() - startTime) % timerDuration;
long passedTime = ((System.currentTimeMillis() - startTime) / timerDuration ) * timerDuration;
mTimerHandle.postAtTime(timer, passedTime + nextEmit);
}
};
mTimerHandle.postAtTime(timer , startTime + timerDuration);
}
//应以对象或其他方式保存处理程序。
//您必须移除所有计时器并将其销毁。
//否则,处理器和计时器将泄漏。
Handler mTimerHandle=new Handler();
Long startTime=System.currentTimeMillis();
//...
对于代码中的(inti=0;i)
a:如果第一个持续时间为7,乘以1000=7000=7秒
b:如果第二个是2,乘以1000=2000=2s
2秒后(b)开始跑步,7秒或5秒后(a)开始跑步
如果你想(b)在a之后被解雇,你应该计算(b)的持续时间
例如,若延迟后的a等于7s,则延迟后的b应等于(7+2)
您可以按如下方式编辑代码:
int totalDuration=0;
for(int i=0;i<type.size();i++){
totalDuration+=duration.get(i);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.e("chekkk",""+i);
}
}, totalDuration * 1000);
}
int totalDuration=0;
对于(int i=0;我可能会重复尝试从中使用执行器服务other@NileshRathod不,它不是那个问题的重复,因为我已经讨论过那个问题了。WinCloud,它的工作方式和我的代码完全一样,比如循环最后执行的时间更长,但它不应该是这样。它应该是like如果第一次迭代的持续时间为7分钟,则应运行7分钟,然后应进行第二次迭代,但所有迭代的持续时间相同time@SudhansuSekhar我以其他方式更新了time point post。它以相同的持续时间为服务器发出。@SudhansuSekhar抱歉,我没有详尽地阅读问题,我已将代码更新为“相同的持续时间”问题。检查一下。Ohk Wincloud我会检查一下,让你知道emm…等等…你是说工作应该这样执行吗?等7s-做A-等2s-做B?阿米尔,你正确理解我的问题。你能告诉我如何将延时设置为“A”到“B”吗。然后我想我的问题会解决。@SudhansuSekhar我编辑了你的代码,并在我的答案中添加了代码。请告诉我它是否有效