我就是那个观点只能从主线程被操纵的印象......但是,为什么这不会崩溃:Android为什么这不会抛出错误的线程异常?
public class MainActivity extends Activity {
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
tv = new TextView(this);
tv.setText("original text");
setContentView(tv);
new Thread(new Runnable() {
@Override
public void run() {
tv.setText("trollollolol i should die here but i won't.");
}
}).start();
}
}
我跑设备&模拟器,都工作得很好,我看到了文本更改。这是怎么回事?
我还检查线程ID和后台线程绝对不是主线程(线程ID = 1)
虽然我不太熟悉Android UI的线程实现和检查,但我不禁想知道在调用Activity.onCreate期间是否有“运行UI线程”这样的事情?毕竟,在这个线程中添加一个简短的Thread.sleep会导致应用程序崩溃。 – harism
我不熟悉检查的具体实现(我已经看到一些CalledFromWrongThreadException发生之前)。但通过在UI线程上运行,我认为Android可能已经检查了一些调用,以检查您当前的线程ID是否不是1。线程ID 1一直是我所理解的“主/ UI线程” –
这相当有趣我相信:在更新文本视图之前,在线程内添加一个'Thread.sleep(1000);'。该应用程序将崩溃,并引发预期的'CalledFromWrongThreadException'。 –