java - Android线程修改EditText

标签 java android multithreading android-edittext

我在由线程启动的另一个函数中修改 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/

相关文章:

multithreading - 从信号处理程序访问共享数据

ios - 在 iOS 上使用单独的线程联网

java - 未调用actionListener中的方法

java - 如何分析 Java 程序从开始到结束的运行过程?

Android SQLite 3,JOINS 还是多个查询?

android - EditText 到字符串不返回任何值

java - 删除空元素xml字符串java?

java - 即使在同步后仍存在竞争条件

android - GSON 相对于普通 JSON 解析的优势

multithreading - 在 Golang 中实现 "events"(带有通知程序/接收程序)的概念?