【发布时间】:2013-12-24 22:41:49
【问题描述】:
我有一个名为 actions_table 的表。其中有必须按特定顺序执行的操作,它们由单独的服务实施。一切正常,除了延迟动作。当动作表中有延迟时,只要给定的延迟,应用就会冻结,最奇怪的是,其他服务会在延迟之后执行,即使它们是在 delay_thread 启动之前启动的!!
我已经用一个thead和一个while循环来实现延迟,检查系统时间是否超过了start_time + delay_time。同样的结果。
如何在不延迟延迟之前启动的服务的情况下实现此延迟? (而且不冻结 UI 也很好)
MainActivity{
onCreate{
.
.
.
for(i=0;i<actions_table.length;i++){
if(condition1)
startService1
else if(delay_condition2)
delay_thread.start();
else if(condition3)
startService3
}
.
.
.
}
}
我终于想出了一些可行的方法。分享我为他人所做的事情。
delay=0;
for(i=0;i<actions_table.length;i++){
if(current_action is delay)
delay=number_of_seconds
final Handler = new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run() {
if(condition1)
startService1
.
.
.
else if(conditionX)
startServiceX
}
},delay*1000);
}
这样,延迟操作之后的所有操作都会在所需的秒数后一起执行。 (action1, action2----delay---action3, action4.....actionX)
【问题讨论】:
-
你应该使用处理程序而不是线程,使用处理程序你也可以执行 UI 操作。它只是一种线程。我们应该使用它来执行 UI 操作
标签: android multithreading delay