Android 如何为forloop中的每个循环设置计时器?

Android 如何为forloop中的每个循环设置计时器?,android,for-loop,timer,Android,For Loop,Timer,为每个循环设置计时器意味着如果一个数组中有3个项目,则可以访问我们需要的CallForLoop。我想要的是,当第一个循环运行时,它应该运行到一个特定的时间。然后,第二个循环以给定的特定时间运行。我已经尝试过处理程序的延时,但它不起作用。在处理程序中,所有循环一次运行,但在特定时间后执行。我不知道如何设置每个循环的计时器 { "tp_id": 85, "id": 15, "therapy_type": 1, "mode": 0, "level": 5,

为每个循环设置计时器意味着如果一个数组中有3个项目,则可以访问我们需要的CallForLoop。我想要的是,当第一个循环运行时,它应该运行到一个特定的时间。然后,第二个循环以给定的特定时间运行。我已经尝试过处理程序的延时,但它不起作用。在处理程序中,所有循环一次运行,但在特定时间后执行。我不知道如何设置每个循环的计时器

 {
    "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我编辑了你的代码,并在我的答案中添加了代码。请告诉我它是否有效