【发布时间】:2013-01-08 19:28:48
【问题描述】:
我有一个简单的问题:如果 (re-loop()) 线程的 Looper 之前退出,是否可以重新启动它。例如,我的线程设计如下:
public class ProvaThread extends Thread implements Runnable{
public void run(){
Looper.prepare();
Handler handler = new Handler(){
Log.d(TAG, "handle message..");
@Override
public void handleMessage(Message msg){
getLooper().quit();
}
};
Looper.loop(); //loop 1
Log.d(TAG, "thread continue (1)...");
Looper.loop(); //loop 2
Log.d(TAG, "thread continue (2)...");
}
}
我已经尝试过这段代码,但是当我第二次尝试向处理程序发布消息时(handleMessage()在第二个 loop() 之后不调用)。我得出的结论是,当调用getLooper().quit() 时,是否可以调用loop(),但不能处理新消息,否则会引发异常)。对吗?
我应该使用 wait()/notify() 来做这个吗??
【问题讨论】:
-
如果你不想让looper.quit继续运行,为什么还要调用它呢?您实际上要做什么并不清楚。
-
您是否尝试大声朗读此代码或向其他人解释?它看起来像这样: 1. 我正在创建消息队列 2. 现在我正在添加消息处理程序,它停止消息队列 3. 启动消息队列 4. 显示日志 5. 启动消息队列 6. 显示日志 这是错误的。
-
嘿,Log.d(TAG, "handle message..");在任何方法之外?
-
处理程序中发布的消息来自 UI 线程(消息包含对话响应)。您可以将“线程继续(i)”读作“继续细化(i)”,将“Looper.loop()”读作“在 Ui 线程中发布对话框,使用另一个处理程序,并等待响应”。可能这不是制作这个的正确方法。
-
我想在 UI 线程(对话框)和工作线程之间执行一种乒乓操作。每个细化步骤都取决于对话框的响应..
标签: android multithreading looper