我应该在Android开发中使用侦听器接口或处理程序来进行事件回调吗?

时间:2010-11-16 03:11:33

标签: c# java android windows-mobile

我是Java的新手,我正在移植我们的Windows Phone 7库以在Android上运行。由于语法相似,到目前为止这一点非常简单。我们的库基本上是一个抽象的http消息队列,它在移动平台上提供数据持久性和完整性。它只提供异步方法,这是一种设计选择。在WP7上,当处理异步消息并收到服务器响应时,我使用委托来调用用户提供的回调。

为了在Android上实现同样的目的,我到目前为止找到了两种方法 - 一个简单的Java监听器接口,它包含用户必须实现的OnSuccess和OnFailure方法,或者使用在线程之间提供消息队列的Android处理程序类( http://developer.android.com/reference/android/os/Handler.html)。

我已经在这个阶段使用了Handler,就像我说的那样,它与C#委托最相似。对于我们库的用户来说,实现它似乎也不那么重要了。一些使用我们的库的用户代码示例:

connection.GetMessage("http://somerestservice.com", GetCallback);

Handler GetCallback = new Handler() {
    public void handleMessage(Message message){
        CustomMessageClass customMessage = (CustomMessageClass)message.obj;

        if(customMessage.status == Status.Delivered) {
           // Process message here, 
           // it contains various information about the transaction 
           // as well as a tag that can contain a user object etc. 
           // It also contains the servers response as a string and as a byte array.
        }
    }
};

使用它,用户可以创建任意数量的不同处理程序,调用它们所需的任何处理程序,并将它们作为方法参数传递。非常类似于代表...

我想知道我是否应该转移到监听器接口的原因是因为我获得的Java越多,它看起来就越多,它就是如何完成的,这就是使用我们的库的第三方希望它能够完成的方式。

它基本上是相同的过程,除了每次你想要对服务器响应做一些不同的事情,即你可能从不同的端点获取不同类型的数据,你将不得不创建一个实现我们的接口的自定义类每次,以及实现我们的界面有任何方法。或者当然,您可以拥有一个单一的整体课程,所有服务器响应都可以进入,但尝试找出如何处理每个单独的响应... ...

由于来自C#,我可能有点偏颇,但是听众似乎有点复杂,我更喜欢处理程序实现,任何Java开发人员都有任何想法/建议吗?非常感谢。

干杯!

2 个答案:

答案 0 :(得分:1)

使用接口方法的好处是松散耦合。这样,任何实现接口的类都不应该知道(或受其影响)在其他地方进行的任何线程管理,并且可以在其范围内适当地处理结果对象。

顺便说一下,我是AsyncTask的忠实粉丝。你尝试过使用过吗?

答案 1 :(得分:0)

我不认为你有什么编译..你需要在使用之前定义处理程序实现吗?

但是对于你问题的实质内容,如果你真的希望每个响应都有一个不同的处理程序实现,那么api就好了。

如果所有消息都以相同的方式处理,我将使用侦听器模式,或者不同的处理仅取决于在进行getMessage调用时无法确定的消息中的内容。

另外,通常在Java函数和变量名称中以小写字母开头。只有类名以大写字母开头。