2

我想循环更新一个 Android 布局。为此,我编写了一个从TimerTask. 不幸的是,我的代码导致异常,我真的不知道问题可能是什么。:(

所以也许有人可以帮忙。

谢谢

克里斯

这是我的代码:在我的主要活动中:

private MyLayoutClass m_MyLayout;

...

public void onCreate(Bundle savedInstanceState)
{
  ...
  m_MyLayout = new AdLayout(this);

  Timer caretaker = new Timer();
  caretaker.schedule(new MyReloadTimerTask(m_MyLayout), 1000, 5000);
  ...
}

这是我派生的 TimerTask 类:

public class MyReloadTimerTask  extends TimerTask
{
  private MyLayoutClass m_MyLayout;


  public MyReloadTimerTask(MyLayoutClass aLayout)
  {
    m_MyLayout = aLayout;
  }


  @Override
  public void run()
  {
    m_MyLayout.doReload();
  }
}

doReload() 无法执行,我收到一条异常消息:Can't create handler inside thread that has not called Looper.prepare()

4

1 回答 1

4

Timertask 在不同的线程上运行。因此,您不能不从后台线程更新/访问 ui。

可能m_MyLayout.doReload()正在更新ui。使用HandlerrunOnUiThread

 runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            m_MyLayout.doReload()
                        }
                    });

使用处理程序

 Handler m_handler;
 Runnable m_handlerTask ;
      m_handler = new Handler();
       m_handlerTask = new Runnable()
       {
           @Override 
           public void run() { 
              // do something
                m_handler.postDelayed(m_handlerTask, 1000);
                  // repeat some task every 1 second    

           }
      };
      m_handlerTask.run(); 

取消运行

m_handler.removeCallbacks(m_handlerTask);
于 2013-10-10T09:47:49.593 回答