【发布时间】:2011-05-10 14:32:22
【问题描述】:
我是 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 开发人员有任何想法/建议?将不胜感激。
干杯!
【问题讨论】:
-
我自己是Java和Android的新手,所以我没有资格完整回答,但我的理解是监听器和处理程序的定义有点模糊,尤其是跨平台。在 Android 开发指南的 UI event section 中,它们将侦听器描述为您绑定到视图上特定事件的对象。您可以在外部执行此操作,而不必扩展视图对象。而他们将处理程序描述为 View 类的标准方法,您在扩展它时会覆盖这些方法。
标签: c# java android windows-mobile