为什么新的 Thread 可以触摸视图

why a new Thread can touch view

提问人:beigirad 提问时间:2/8/2019 更新时间:2/8/2019 访问量:34

问:

正如我们所知,在Android应用程序中,我们可以触摸视图,否则会抛出以下消息:Main/UI ThreadCalledFromWrongThreadException

android.view.ViewRootImpl$CalledFromWrongThreadException:
Only the original thread that created a view hierarchy can touch its views.

但是当我只触摸 1 次时,这个异常不会抛出并且“Hello Again!onCreate()TextView

 TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tv = findViewById(R.id.tv);

    new Thread(new Runnable() {
        @Override
        public void run() {
            tv.setText("Hello Again!");
        }
    }).start();
}

你知道为什么吗?

Android 可运行 异常 android线程

评论

0赞 Raskilas 2/8/2019
看起来您的可运行对象在 onStart 方法之前完成,因此当时可能查看实际上不是主线程/UI 线程。
0赞 beigirad 2/8/2019
@Raskilas 这意味着不在 MainThread 上运行?我也复制了这个截断的代码。它运行正确。onCreate()onStart()
0赞 Raskilas 2/8/2019
我想您的代码只是将 Runnable 添加到事件队列中,如果您在 doInBackground() 的 AsyncTask 中这样做,它将不起作用。
0赞 greeble31 2/9/2019
嗯。。。什么是布局文件中指定的原始文本?这可能很重要。tv's
0赞 beigirad 2/9/2019
原文默认为“Hello world!”,布局和充气等没有问题@greeble31

答: 暂无答案