java后台线程在设置EditText的值时失败
我有一个线程调用MainActivies方法,该方法设置EditText的文本值,但失败了
MyRunnable是这样的:
public class MyRunnable implements Runnable {
MainActivity mController;
public SoundTrigger(MainActivity pController) {
mController = pController;
}
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
if(i % 100) {
mController.triggered(i);
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在MainActivity类中,我的触发方法如下:
public void triggered(int nNum) {
EditTextInstance.setText(nNum+"");
}
但它失败了。我只需要在edittext组件上打印由后台线程创建的实时数据
# 1 楼答案
这样做:
说明:您之前将UI元素从非UI线程更改为非UI线程,这不好。这段代码应该可以工作,但它仍然不是解决问题的推荐方法。您应该使用类似AsyncTask的方法,其中有一个用于“后台”操作(非ui线程操作)的模板方法,以及已经在ui线程上执行的“onPostExecute”
另外一个注意事项:永远不要调用线程。睡眠();在UI线程上(又称主线程)