是否可以从主线程以外访问UI元素?

时间:2016-12-14 06:24:25

标签: 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元素时出错?

1 个答案:

答案 0 :(得分:1)

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

  

Andoid UI工具包不是thread-safe