我在由线程启动的另一个函数中修改 EditText 时遇到问题:
Thread thRead = new Thread( new Runnable(){
public void run(){
EditText _txtArea = (EditText) findViewById(R.id.txtArea);
startReading(_txtArea);
}
});
我的函数如下:
public void startReading(EditText _txtArea){
_txtArea.setText("Changed");
}
它总是在尝试修改编辑文本时强制关闭。有人知道为什么吗?
最佳答案
不应从非 UI 线程修改 UI View 。唯一可以接触 UI View 的线程是“主”或“UI”线程,即调用 onCreate()
、onStop()
和其他类似组件生命周期函数的线程.
因此,无论何时您的应用程序试图从非 UI 线程修改 UI View ,Android 都会抛出一个早期异常来警告您这是不允许的。那是因为 UI 不是线程安全的,这样的预警实际上是一个很棒的功能。
更新:
您可以使用 Activity.runOnUiThread()
来更新 UI。或者使用 AsyncTask
。但是由于在您的情况下您需要不断地从蓝牙读取数据,因此不应使用 AsyncTask
。
这是 runOnUiThread()
的示例:
runOnUiThread(new Runnable() {
@Override
public void run() {
//this will run on UI thread, so its safe to modify UI views.
_txtArea.setText("Changed");
}
});
关于java - Android线程修改EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028185/