2017-05-22 111 views
0

我不擅長Android技術,因此我發佈了一個問題。如何在Android中有效地與UI線程進行通信?

遠程服務器在具有高頻的TCP連接(最高可達30 fps)發送圖片到Android設備。 Android設備將獲取圖片並將其顯示在ImageView容器中(模擬視頻)。

促使UI操作只從主線程使我得到了一些性能問題。現在,網絡接收操作正在單線程中運行,根據docs將數據移動到每個接收到的PIC上的UI線程。

我有兩個想法,更好的性能:

  1. 跳過一些圖片(UI線程更新本身,並採取一些資源最新的框架與聯網線共享)
  2. 不知何故進行優化的繪製過程(只是現在的我將位圖分配給ImageView)

由於Android體驗差,我無法確定是否讚賞此想法。因此,歡迎任何建議。 Thx。

+0

也許第二個線程從ConcurrentLinkedQueue或任何其他線程安全隊列中讀取並將輪詢的圖像發佈到您的視圖? – JacksOnF1re

+0

@ JacksOnF1re這可能是一個好主意(我正在考慮自己實現線程安全隊列),我會測試它的性能。 但我認爲,真正的里程碑是在繪製屏幕上的影像的方式(現在我建立從原料JPEG/PNG/BMP數據的位圖,並將其分配給ImageView的)。 – f4f

+0

如果你有服務器的控制權,我會把它作爲UDP視頻流。 – nasch

回答

0

我可能是錯的,但我不能看到多線程如何讓你更好的(有用的)性能。我建議你減少圖像或編碼(在源),然後恢復 - 解碼(在接收器上)。一個地方去這裏:https://developer.android.com/topic/performance/network-xfer.html

但你必須問自己的圖像,大小,如果你有一個大的形象,你真的需要它嗎?你沒有談論它,這在大多數情況下很重要。像尺寸這樣的參數很重要。本文可以幫助你,如果這是一個很好的選擇:https://developer.android.com/topic/performance/graphics/load-bitmap.html

+0

當然圖像在服務器上編碼,而不是在接收機上解碼。 我意識到圖像大小很重要,但局域網連接允許以30+ fps傳輸足夠的數據,而UI無法顯示超過12-15 fps的數據。 多線程是必需的,只是因爲網絡連接無法在主(UI)線程來建立。 – f4f

相關問題