我想周期性地更新Android版式。为此,我编写了一个从TimerTask派生的简短类。
不幸的是,我的代码导致异常,但我并不十分清楚问题可能出在哪里。 :(

因此,也许任何人都可以提供帮助。

谢谢

克里斯

这是我的代码:
在主要 Activity 中,我得到了:

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

最佳答案

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

关于java - 派生的TimerTask类: `Can' t create handler inside thread that has not called Looper. prepare()中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19292346/

10-10 07:58