2

android.os.Handler对Android中的机制感到非常困惑。为什么消息处理使用int对消息类型进行编码?在阅读了 Effective Java 之后,我学会了偏爱 Enum 而不是int这些类型,我觉得如何在这里继续进行非常不安全。

我想使用状态模式,定义来自 Handler 的子类的不同状态类,以处理来自视图的不同消息。

public class ReadyState extends Handler {

     @Override
     public void handleMessage(Message msg, int what) {
          // ...      
     }
}

我是否必须使用 对我的状态进行编码int,是否可以使用Enumwith 字段:

enum Action {
    START(0), STOP(1), BACKFLIP(2);

    int code;
    public Action(int code) { this.code = code }
}

有替代方法吗?

4

2 回答 2

3

为什么消息处理使用 int 来编码消息的类型?

它需要一个 int 作为参数,因为库的作者不能把你的枚举放在那里,他们甚至不知道它叫什么!

于 2013-01-18T01:17:42.407 回答
1

如果您想将what参数映射到枚举,那就是要走的路。

将其设为 int 意味着您可以将参数用作位集或简单代码或实际数据或其他任何内容。

于 2013-01-18T01:17:58.553 回答