新しいスレッドを作成するコードがいくつかあり、そのスレッド内にハンドラーとルーパーがあります。呼び出しスレッドは、このハンドラーに投稿できます。
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 ハンドラーに送信されないようにするものは何ですか?
このコードが正しくない場合、新しく作成されたスレッドでハンドラーを同期的に作成する方法は何ですか?