2013-06-18 57 views
0

我是新來的android開發,所以我想知道天氣有模型實施可觀察是好的做法或將this發生。可以/應該在Android中的模型類擴展一個Observable

就我而言,我的模型不是數據庫模型,而是服務器的狀態。我有以下類

  • MainActivity - 主要的東西
  • FragmentInfo - 一個片段視圖,其保存的文本框
  • ModelServerStatus - 一個簡單的類,它擁有一個布爾變量和幾個有用的函數來設置/獲取變量。
  • ThreadCheckServerStatus - 通過UDP連接到服務器並執行寫入/讀取的線程。此線程知道ModelServerStatus,並將通過使用setStatus更新ModelServerStatus。這個線程總是運行並睡5秒鐘。

我應該在ModelServerStatus延長Observable和調用notify每ModelServerStatus.setStatus(true/false)運行時間。這樣MainActivity可以是Observer和更新FragmentInfo.textView

一個非常基本的ModelServerStatus.setStatus()實施

public void setStatus(boolean newStatus) 
{ 
    // See if the value of the server has changed 
    if (hasStatusChanged(newStatus)) 
    { 
     //Observer Notify 
     setChanged(); 
     notifyObserver(); 
    } 
} 

我這背後的思維:

該模型將通知控制器更新視圖

個的ModelServerStatus將通知MainActivity更新FragmentInfo

我想想也

控制器將檢查更新的模式,並在必要時更新視圖。

但是這聽起來不對。

問題的確是這個任務的最佳實施是什麼!

想法?感謝您的幫助

回答

1

我想我會做什麼在這種情況下,有一個Service在後臺運行。這將保持服務器的狀態。將其初始化爲false。您連接到服務器,成功時將其設置爲true。根據需要輪詢它,當服務器不可用時將其設置爲false。

Service應當在狀態從真變爲假時觸發broadcast,反之亦然。

在活動(或片段)中,您可以register a BroadcastReceiver來收聽onResume()中的broadcast。在onPause()中取消註冊BroadcastReceiver

只要您的服務檢測到更改,您的UI組件就會得到廣播。

警告

做網絡投票將讓你的用戶來說是非常,非常暴躁。大多數用戶會卸載您的應用程序的這種行爲。

+0

真棒這可以在服務+1完成,但我不知道這是比我的模型更好或更差。此外,我只希望它只在應用程序運行時輪詢,而不是在其暫停時輪詢, –

+0

您可以隨時停止服務。並從簡歷開始。我相信你的模型會很好。但處理長期聯網事件的普遍接受的方法是通過服務。在這種情況下,通信的廣播方式很好地工作,儘管您可以輕鬆創建一個直接通信系統。 – Knossos

相關問題