繁体   English   中英

Java中是否有类似android.os.Handler的类?

[英]Is there any class in Java similar to android.os.Handler in Android?

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中寻找类似的技术,还是应该实现自己的处理程序?

默认情况下没有一个。 但是你可以创建自己的自定义类来执行类似的操作。 我做了一个这样的:

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的完整功能。

我相信你正在寻找像Observer Pattern这样的东西,这样可以轻松地将对象传递给另一个。

请参阅>>> http://www.javaworld.com/javaqa/2001-05/04-qa-0525-observer.html

另外>>> http://www.oodesign.com/observer-pattern.html

我希望我帮助过......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM