java - 是否可以从主线程以外的地方访问 UI 元素?

标签 java android multithreading

我从许多教程和在线资源中读到,我们无法从主线程之外的其他地方访问 UI 元素。我们可以使用处理程序、runOnUiThread 或 AsyncTask 来访问 UI 元素。但是,我对下面的代码有一个疑问。

public class MainActivity extends Activity {

ProgressBar progress;
TextView text;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    progress = (ProgressBar) findViewById(R.id.progreeBar);
    text = (TextView) findViewById(R.id.loading);
    Thread thread = new Thread(new myThread());
    thread.start();

}

public class myThread implements  Runnable{

    @Override
    public void run() {
        progress.setProgress(50);
        text.setText("counter: "+50);
    }
}
}

Code Output

在上面的代码中,我可以从另一个线程访问 UI 元素,而无需使用任何处理程序、runOnUiThread 或 AsyncTask。我很好奇为什么我从主线程外部访问 UI 元素没有错误?

最佳答案

是的,您可以从其他线程更新 UI,但您应该避免这样做。因为根据 Android 文档

Andoid UI toolkit is not thread-safe

关于java - 是否可以从主线程以外的地方访问 UI 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41136094/

相关文章:

android - 带索引字母的字符串资源

Android:如何将 url 存储在 string.xml 资源文件中?

java - 构建受控的java线程队列

multithreading - 线性系统求解器在 Julia 中是否也像在 Matlab 中一样是多线程的?以及如何在 Julia 中对其进行 "multithread"处理?

java - 加密/解密(使用 AES)大文件并通过 HTTP 传输

java - CSV 保留 CRLF 同时替换 LF

java - 如何读取.pem文件来获取私钥和​​公钥

android - 在 Android Studio 中将 png 图像转换为 9 补丁

java - 嵌套锁上的非法状态异常

java - 如何将记事本/电子表格中的数据集导入 Matlab GUI