我有一些代码来创建一个新线程,然后在该线程中创建一个处理程序和循环器。然后调用线程可以发布到这个处理程序:
class MyClass {
Handler mHandler = null;
Thread mThread = null;
MyClass() {
mThread = new Thread() {
public void run() {
Looper.prepare();
mHandler = new Handler();
Looper.loop();
}
};
mThread.start();
/* ... */
mHandler.post(...);
}
}
此代码几乎直接来自文档中的示例。但我不明白它怎么可能是正确的。因为 mHandler 是在子线程中初始化的,所以不能保证什么时候发生。是什么阻止了这段代码在最后一行发布到 null 处理程序?
如果此代码不正确,那么以同步方式在新创建的线程上创建处理程序的方法是什么?