需要明确的是,这个问题不是关于如何从线程更新 TextView,它工作正常。问题是,即使我在整个线程中多次调用更新 TextView,更新也只会在线程完成后才会出现。这是一个例子:
公共类 NDThread 扩展线程 {
受保护的 LogActionListener log_listener;
私人处理程序处理程序=新处理程序();
公共无效运行(){
logAction("开始");
// 做很多事情..
logAction("中途");
// 还有很多东西..
日志操作(“完成”);
}
公共接口 LogActionListener {
公共无效onLogAction(字符串参数字符串);
}
公共无效 logAction(最终字符串 str){
if(log_listener != null) handler.post(new Runnable() {
@覆盖
公共无效运行(){
log_listener.onLogAction(str);
}
});
}
}
在我的主要活动中,我实现LogActionListener接收字符串并更新 TextView:
NDThread 线程 = 新的 NDThread();
thread.setOnLogActionListener(this);
线程.run();
// 其他地方..
@覆盖
公共无效onLogAction(最终字符串味精){
handler.post(new Runnable() {
@覆盖
公共无效运行(){
textView.append(msg);
}
});
}
如您所见,我Handler在 Thread 和 Activity 中都使用了 s,因为我不确定哪个正确使用。但是,结果始终是整个 Thread 的空白 TextView,然后在最后它将打印 3 行。我究竟做错了什么?