我尝试了很多方法来使用处理程序在后台线程上接收消息,但我还没有成功。
有没有确定的火灾方法来测试这个?是否有一个示例代码可以用来查看它是如何完成的?
答案 0 :(得分:2)
是的,请尝试@FoamyGuy the answer。在示例代码中,他发回了一条空消息。我正在扩展他的代码以传递字符串。如果你想将一些消息发送回处理程序(例如:string),你可以发送一些字符串或其他东西,如下所示:
Handler h = new Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what == 1){
//Success
String msg = (String)msg.obj;
Log.d("", "Msg is:"+msg);
}else{
//Failure
String msg = (String)msg.obj;
Log.d("", "Msg is:"+msg);
}
}
};
Thread t = new Thread() {
@Override
public void run(){
doSomeWork();
if(succeed){
//we can't update the UI from here so we'll signal our handler. and it will do it for us.
Message m = h.obtainMessage(1, "Success message string");
m.sendToTarget();
}else{
Message m = h.obtainMessage(0, "Your Failed!");
m.sendToTarget();
}
}
}
答案 1 :(得分:0)
在非UI线程上?您需要做的就是在该线程上创建一个Looper,然后在其上创建处理程序。这将自动导致Handler与该Looper关联。然后运行Looper.loop
所以
Looper.prepare();
Handler myHandler = new Handler();
Looper.loop()
和myHandler将在线程上。