2

我有一个 ArrayList 的操作列表。对象动作包含 3 个参数(按钮、动作、time_it_takes)。所以我要做的是得到一个 ArrayList 的操作表单来执行它并等待一段时间,然后执行下一个操作,依此类推。我已经尝试过,但没有任何更新,因为它只是挂了一段时间,没有更新。我试过 runOnUiThread 但它也给了我错误。实际上,我认为我的多线程概念很弱。这是我正在尝试的...

  public void replay()
{
     ArrayList<Action> actions = gui.getActionList();
    for(i =0; i<actions.size(); i++)
    {
        gui.Replay(actions.get(i));
        try 
        {
            Thread.sleep(actions.get(i).getTime()); // delay for the next task
        } 
        catch (InterruptedException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
} 

请帮忙

4

1 回答 1

1

从您的评论中,您replay()从在 ui 线程上运行的活动中调用

您正在调用sleep阻止 ui 线程的 ui 线程。你不应该阻塞 ui 线程。不要Thread.sleep(2000)在 ui 线程中调用。

http://developer.android.com/training/articles/perf-anr.html

如果你希望每隔几秒执行一次,你可以使用 Handler。

Handler m_handler;
Runnable m_handlerTask ;  
m_handler = new Handler();   
m_handlerTask = new Runnable()
{
  @Override 
  public void run() { 

    // do something every 1 second 
    m_handler.postDelayed(m_handlerTask, 1000);    

  }
  };
 m_handlerTask.run();

取消运行

m_handler.removeCallbacks(m_handlerTask);
于 2013-10-03T15:12:07.127 回答