我搜索了其他帖子,但我没有找到符合我问题的案例,所以请不要将我推荐给其他帖子。
我列出了数百个不同的时间,如下表所示:
timeList = {5,13,21,40,...}。
假设它们保存在arraylist中。这意味着一些任务必须在5秒,13秒,...从起点开始执行。我如何使用定时器或任何其他方式来实现此目的? 如果有帮助的话,我也可以使用这种格式的timeList:
timeList = {8:05,8:13,8:21,8:40,...}。
我当前的计时器是这样的:
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
synchronized public void run() {
//do some task
}
}, startPoint, Period);
但这显然是以固定利率运作的!
答案 0 :(得分:0)
使用Timer.schedule(TimerTask task, long delay),设置所有计时器并等待它们执行
假设您正在使用MM:SS格式(例如:8:58):
ArrayList<String> your_arraylist = new ArrayList<String>();
//your list above, fill it with MM:SS
final ArrayList<Long> seconds = new ArrayList<Long>();
final ArrayList<Long> minutes = new ArrayList<Long>();
long first_minute;
for (String time : your_arraylist) {
minutes.add(Long.parseLong(time.split(":")[0]));
seconds.add(Long.parseLong(time.split(":")[1]));
}
first_minute = minutes.get(0);
for (int i = 0; i < seconds.size(); i++) {
long waiting_duration;
if (seconds.get(i) < Calendar.SECOND) {
waiting_duration = (60 - Calendar.SECOND + seconds.get(i)) * 1000;
}
else {
waiting_duration = (seconds.get(i) - Calendar.SECOND) * 1000;
}
waiting_duration += (minutes.get(i) - first_minute) * 60 * 1000;
Timer timer = new Timer();
TimerTask timer_task = new TimerTask() {
@Override
public void run() {
// do jobs
}
};
timer.schedule(timer_task, waiting_duration);
}
答案 1 :(得分:0)
请勿使用Timer代替Handler。
private int[] mTimeList = {5000, 2000, 7000, 4000};
private int mCount;
private int mDelay;
private Handler mHandler = new Handler();
private void initRepeatedTimer() {
mHandler.postDelayed(new Runnable() {
public void run() {
Log.e(TAG, "run: " + mCount);
mDelay = mTimeList[mCount];
if (mCount < mTimeList.length - 1)
mCount++;
else
mCount = 0;
mHandler.postDelayed(this, mDelay);
}
}, mDelay);
}
您会注意到日志按照列表中的延迟打印。