不挂起更新GUI

时间:2013-10-03 14:58:58

标签: java android multithreading

我有一个动作列表,它是一个ArrayList。对象操作包含3个参数(button,action,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();
        }
    }
} 

请帮助

1 个答案:

答案 0 :(得分:1)

根据您的评论,您从您在ui主题上运行的活动中调用replay()

你在阻止ui线程的ui线程上调用sleep。你不应该阻止ui线程。不要在ui主题中调用Thread.sleep(2000)

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

如果您希望每隔几秒执行一次,就可以使用处理程序。

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);