異なるスレッドから同じルーパーをリッスンするハンドラーを実装しようとしています。
以下に2つのハンドラーがあります。1つはメインスレッドで作成され、もう1つは子スレッドで作成されますが、どちらもメインルーパーでリッスンするように初期化されています。
private Handler mMain;
public static final ThreadPoolExecutor tpe =
(ThreadPoolExecutor) Executors.newCachedThreadPool();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMain = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
Log.wtf("", "main:" + msg);
}
};
tpe.execute(new Runnable() {
private Handler tChild = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
Log.wtf("", "child:" + msg);
}
};
@Override
public void run() {
Log.wtf("", "send msg to main looper");
tChild.sendEmptyMessage(100);
}
});
}
しかし、以下のようなメッセージを送信すると、子ハンドラーのみがメッセージを出力します。メインハンドラーはメッセージを受信しません。
03-20 22:02:26.754: A/(12857): send msg to main looper
03-20 22:02:26.847: A/(12857): child:{ what=100 when=-8ms }
私は何が間違っているのですか?読んでくれてありがとう。