Android中的Handler用于在类之间发送消息。例如:
public class Foo
{
private Handler handler;
public Foo(Handler handler)
{
this.handler = handler;
// ...
}
public void fooMethod()
{
// ...
handler.obtainMessage("blah blah").sendToTarget();
}
}
主要
public class Main
{
private Handler handler;
public Main()
{
handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// handle the message that is sent from Foo
}
};
Foo f = new Foo(handler);
// ...
}
}
所以,我在Java中寻找类似的技术,还是应该实现自己的处理程序?
答案 0 :(得分:3)
默认情况下没有。但是你可以创建自己的自定义类来执行类似的操作。 我做了一个这样的:
import java.util.ArrayList;
public class Handler extends Object{
ArrayList<Message> messages;
public Handler(){
messages = new ArrayList<>();
}
public final Message obtainMessage(int what, Object obj){
Message message = new Message(what, obj, this);
messages.add(message);
return message;
}
public final Message obtainMessage(int what){
Message message = new Message(what, this);
messages.add(message);
return message;
}
public void handleMessage(Message msg){
messages.remove(msg);
}
public final boolean hasMessages(){
return !messages.isEmpty();
}
}
然后你还需要一个像这样的自定义Message类:
public class Message extends Object{
int mWhat;
Object mObj;
Handler mTarget;
public Message(int what, Object obj){
mWhat = what;
mObj = obj;
}
public Message(int what, Object obj, Handler target){
mWhat = what;
mObj = obj;
mTarget = target;
}
public Message(int what, Handler target){
mWhat = what;
mTarget = target;
}
public Message(int what){
mWhat = what;
}
public void sendToTarget(){
mTarget.handleMessage(this);
}
}
您可以使用此处理程序从后台线程与UI线程进行通信,而不会过多地干扰UI线程。
您可以像在Android中一样使用此类: 首先,在UI类中创建一个实例:
final int MESSAGE_RECEIVED = 0;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.mWhat){
case MESSAGE_RECEIVED:
System.out.println("Message received.");
updateStatus("Message received.");
break;
}
}
};
然后将此Handler实例提供给后台线程:
Thread thread = new T1(handler);
thread.start();
最后,您通过以下方式发送消息:
mHandler.obtainMessage(0).sendToTarget();
我在我做过的示例applet程序上测试了这个方法,它似乎完美无缺。虽然我不是一个专业的java程序员,所以可能会有一些缺点,我真的不知道。如果是这样的话,我很乐意听到一个有教育的解释为什么这不好。
希望这有助于某人。
注意:上面的Handler和Message类(我的代码)不提供Android.Handler和Android.Message的完整功能。
答案 1 :(得分:1)
我相信您正在寻找像Observer Pattern这样的东西,这样可以轻松地将对象传达给另一个。
请参阅&gt;&gt;&gt; http://www.javaworld.com/javaqa/2001-05/04-qa-0525-observer.html
另外&gt;&gt;&gt; http://www.oodesign.com/observer-pattern.html
我希望我帮助过......