将消息从不同的处理程序发送到另一个处理程序的消息队列
Sending messages from a different Handler to another handler's message queue
我想从另一个处理程序(不是从 LooperThread mhandler 本身)发送到 LooperThread 的消息队列,但它没有显示任何内容。
thread.sleep是启动mHandler
有什么想法吗?
主要Activity
new LooperThread().start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Handler handler = new Handler(LooperThread.mHandler.getLooper());
handler.sendEmptyMessage(3);
LooperThread
class LooperThread extends Thread {
static Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
Log.d("LooperThread","handleMessage");
}
};
Looper.loop();
}
}
你什么都没看到的原因是因为消息发送到 "handler" 而不是 "LooperThread.mHandler" 但只有 "LooperThread.mHandler" 打印了一些东西。
我的建议是:
- 按照@zapl 的建议使用 HandlerThread 并删除睡眠。当 looper 没有准备好时,getLooper 会阻塞。
- 不要使用像 "mHandler" 这样的静态变量,特别是在这种情况下,如果你选择 HandlerThread
,你根本不需要 "mHandler" 来获取循环程序
我想从另一个处理程序(不是从 LooperThread mhandler 本身)发送到 LooperThread 的消息队列,但它没有显示任何内容。
thread.sleep是启动mHandler
有什么想法吗?
主要Activity
new LooperThread().start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Handler handler = new Handler(LooperThread.mHandler.getLooper());
handler.sendEmptyMessage(3);
LooperThread
class LooperThread extends Thread {
static Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
Log.d("LooperThread","handleMessage");
}
};
Looper.loop();
}
}
你什么都没看到的原因是因为消息发送到 "handler" 而不是 "LooperThread.mHandler" 但只有 "LooperThread.mHandler" 打印了一些东西。
我的建议是: - 按照@zapl 的建议使用 HandlerThread 并删除睡眠。当 looper 没有准备好时,getLooper 会阻塞。 - 不要使用像 "mHandler" 这样的静态变量,特别是在这种情况下,如果你选择 HandlerThread
,你根本不需要 "mHandler" 来获取循环程序