我目前正在編寫我的第一個Android應用程序,它將ping遊戲服務器,檢查它們是否在線,並在用戶離線時提醒用戶。該應用程序還顯示主要活動上的每個服務器狀態。爲了做到這一點,我做了一個無限期運行的服務,它循環訪問服務器對象的靜態列表(它是靜態的,因爲只有一個服務實例),ping服務器,然後將服務器狀態更改爲在線/離線。對於主要活動,我創建了一個計時器,該計時器還循環顯示該列表,檢查服務器的狀態,然後將服務器的TextView更改爲聯機/脫機。之所以我爲更新用戶界面做了一個單獨的計時器,是因爲我只希望它在主要活動可見時運行。有一個更好的方法嗎?從服務更新UI的更有效方法?
2
A
回答
1
如果您只想在主要活動可見時運行它,請實施一種方法來執行此操作。例如:How to detect when an Android app goes to the background and come back to the foreground
然後,對於「服務器對象的靜態列表」,我會小心使用靜態的東西,這通常不是一個好主意(並且它在訪問靜態成員時「技術上比較慢」)。
對於「計時器」,不要這樣做。而是讓你的服務廣播一個意圖(或者如果你綁定它,讓你的活動實現一個定製的接口,服務器可以在典型的觀察者/監聽器模式中與之交談)。
例如爲:
public interface ServerStatusListener {
void onServerIsUp();
void onServerIsDown();
}
如果你去廣播意圖路線,有一個小的廣播接收器在你的基地的活動,聽這樣的:
public class ServerStatusReceiver extends BroadcastReceiver {
public void onReceive(final Context context, final Intent intent) {
// analyze the intent and determine what happened
// pseudo code
if (intent.getBooleanExtra("com.your.app.EXTRA_NETWORK_IS_UP", false)) {
serviceIsUp();
} else {
serviceIsDown();
}
}
}
你的想法。兩種方法都可以。不同的概念。請記住,onReceive方法已經在UI線程上運行,不要在那裏執行昂貴的東西。
閱讀有關服務,廣播接收器等的Android文檔。這是很好的材料,如果您要成爲Android開發人員,您將需要知道這一點。
玩得開心!
0
你可以考慮一個廣播接收器。您的服務可以在每次完成操作時發送廣播,然後您的主要活動可以訂閱此廣播並在每次收到廣播時修改UI。
廣播很容易擴展。如果您想要添加其他活動來監視服務的狀態,那麼其他活動只會訂閱相同的操作。
相關問題
- 1. 從服務更新UI更有效的方式比意圖?
- 2. 更新UI從服務
- 3. 從服務更新UI MapView
- 4. 從服務器獲取實時更新的最有效方法?
- 5. 服務器的UI更新
- 6. 從Android中的服務更新UI
- 7. Angular 2更新服務更新UI
- 8. 如何從後臺服務更新ViewModel的LiveData並更新UI
- 9. 從EContentAdapter更新UI的正確方法
- 10. SKPaymentTransactionObserver方法的UI更新
- 11. 從任務更新Datagridview UI
- 12. 如何從方法快速更新UI
- 13. 無法從IntentService更新UI
- 14. 無法從AsyncTask更新UI
- 15. UI無法從EventAggregator更新
- 16. Angularjs UI不會更新由承諾更新的服務綁定?
- 17. 更有效的方法.php
- 18. 更有效的方法呢?
- 19. 方向更改 - 更新UI
- 20. 什麼是從服務更新用戶界面的最有效方式
- 21. Android服務UI更新後onDestroy()
- 22. 無法更新從sonarqube服務器
- 23. 更有效的綁定大插入或更新的方法?
- 24. 從服務更新android
- 25. IllegalStateException listview從服務更新
- 26. 更新從服務器
- 27. 更新從服務seekbar
- 28. 調用方法從服務中更新活動中的TextViews
- 29. 從REST Web服務更新SQL Server 2005的最簡單方法
- 30. 從列表更新映射的有效方法
你可以考慮使用事件總線模式。有幾個庫實現它([Otto](https://github.com/square/otto)或[EventBus](https://github.com/greenrobot/EventBus)) – 2014-09-30 23:37:11