Java 设置EditText';时后台线程失败;s值
我有一个线程调用MainActivies方法,该方法设置EditText的文本值,但失败了 MyRunnable是这样的:Java 设置EditText';时后台线程失败;s值,java,android,multithreading,Java,Android,Multithreading,我有一个线程调用MainActivies方法,该方法设置EditText的文本值,但失败了 MyRunnable是这样的: public class MyRunnable implements Runnable { MainActivity mController; public SoundTrigger(MainActivity pController) { mController = pController; } @Override
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();
}
}
}
}
但它失败了。我只需要在edittext组件上打印由后台线程创建的实时数据。如下所示:
public void triggered(int nNum) {
EditTextInstance.setText(nNum+"");
}
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
if(i % 100) {
mController.runOnUiThread(new Runnable() {
public void run() {
mController.triggered(i);
}
});
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@覆盖
public void run(){
对于(int i=0;i<10000;i++){
如果(i%100){
mController.rununuithread(新的Runnable(){
公开募捐{
mController.triggered(i);
}
});
}
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
说明:您之前将UI元素从非UI线程更改为非UI线程,这不好。这段代码应该可以工作,但它仍然不是解决问题的推荐方法。您应该使用类似的方法,其中您有一个用于“后台”操作(非ui线程操作)的模板方法和已经在ui线程上执行的“onPostExecute”
另一个附加说明:永远不要调用线程.sleep();在UI线程(又称主线程)上ViewRootImpl.checkthread()行:60 logcatYes中没有任何内容,它可以工作。我在活动的triggered()方法中使用了runOnUIThread()方法。太棒了!但请考虑将代码与AcyCastRead相匹配。