我想周期性地更新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。使用Handler
或runOnUiThread
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/