gpt4 book ai didi

java - 派生 TimerTask 类 : `Can' t create handler inside thread that has not called Looper. prepare() 中的错误

转载 作者:搜寻专家 更新时间:2023-11-01 08:02:22 26 4
gpt4 key购买 nike

我想循环更新 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(),我收到一条异常消息:无法在未调用 Looper.prepare() 的线程内创建处理程序

最佳答案

Timertask 在不同的线程上运行。所以你不能不从后台线程更新/访问用户界面。

可能 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com