2010-11-16 38 views
3

我是Java的新手,我正在移植我們的Windows Phone 7庫以在Android上運行。由於語法上的相似性,迄今爲止這非常簡單。我們的庫基本上是一個抽象的HTTP消息隊列,它在移動平臺上提供數據持久性和完整性。它只提供了一種設計選擇的異步方法。在WP7上,當處理異步消息並收到服務器響應時,我使用委託來調用用戶提供的回調。我應該在Android開發中使用偵聽器接口還是事件回調處理程序?

爲了在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開發人員都有任何想法/建議嗎?這將非常感激。

乾杯!

+0

我是新來的Java和Android我自己,所以我沒有資格完全回答,但我的理解是,偵聽器和處理程序的定義有點模糊,特別是在跨平臺。在Android開發人員指南的[UI事件部分](http://developer.android.com/guide/topics/ui/ui-events.html)中,他們將偵聽器描述爲綁定到您的特定事件的對象視圖。您在外部執行此操作時無需擴展視圖對象。而它們將處理程序描述爲View類的標準方法,您在擴展它時會覆蓋它。 – aptwebapps 2010-11-16 03:24:44

回答

1

使用接口方法的好處是鬆耦合。這樣,任何實現你的接口的類都不應該知道(或受其影響)其他任何線程管理,並且可以在其範圍內適當地處理結果對象。

順便說一句,我是AsyncTask的忠實粉絲。你嘗試過使用嗎?

+0

感謝Brandon,我已經轉向使用接口,現在我已經實現了它,它實際上感覺比處理程序更清潔;) - AsyncTasks看起來很棒,雖然我們沒有使用它們,但內部我們剛剛開始新線程老式的方式。雖然所有的服務器響應都是在UI線程上返回的,所以我可以想象如果服務器響應需要任何類型的後處理,使用這個庫的大多數人都會使用AsyncTasks。 – Tyler 2010-11-16 21:45:58

0

我不認爲你在那裏編譯..你需要在使用它之前定義處理程序的實現?

但是,對於你的問題的實質,如果你真的想爲每個響應不同的處理程序實現,比你看起來好的API。

如果所有的消息都以相同的方式處理,或者不同的處理僅取決於在進行調用時無法確定的消息中的內容,我會使用偵聽器模式。

另外,通常在Java函數中,變量名稱以小寫字母開頭。只有類名以大寫字母開頭。

+0

編譯好的處理程序實現後,我作爲一個方法參數傳入它,可能是Eclipse做一些幕後魔術? :) 我覺得它應該儘可能簡單地爲我們的庫的每個調用回調一個簡單的原因是由於我們預計我們的庫的用戶需要處理的不同端點和數據的數量。作爲一個例子,一個終點可能包含用戶對象,另一個可能包含他們的約會,另一個可能包含他們的聯繫人 - 所有不同的數據結構需要不同的處理。 – Tyler 2010-11-16 03:39:06

相關問題