4

我编写了以下代码,它基本上启动了一个线程,从中更改了 TextView 的文本。

我期待一个错误,因为我从另一个线程而不是主线程访问 TextTiew(UI 元素)。

但它工作正常。据我所知,这不应该是可能的。
我不明白,我错过了什么?

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView tv = (TextView) findViewById(R.id.view1);
        tv.setText(Thread.currentThread().getName());

        Thread theThread = new Thread(new aRunnable(tv));
        theThread.start();      
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

public class ARunnable implements Runnable{     
    TextView tv;    
    public ARunnable(TextView tv){
        this.tv = tv;
    }   
    @Override
    public void run() {
        tv.setText(tv.getText()+"----" + Thread.currentThread().getName()); 
    }

}
4

1 回答 1

2

文档说他们并Do not access the Android UI toolkit from outside the UI thread. 没有说 Android 本身包含任何代码来阻止你这样做。这只是一个坏主意,可能会产生意想不到的副作用。

您应该调用Activity.runOnUiThread()以从其他线程更新 UI。

于 2013-04-10T14:29:39.023 回答