2012-12-27 129 views
2

我們有一種通過Socket與服務器連接的應用程序。服務器通常會發送一些訂單(添加訂單,更新它們和刪除)。服務器每秒發送20個請求。根據對Android客戶端的請求,我們必須更改ListView適配器。我們正在這樣做,但是我們有巨大的CPU負載。Android ListView和CPU負載

您認爲這個問題的根源是什麼?

使用ViewHolder實現的ListView。我們不知道在何處測量時間以及如何定義此特定應用程序的瓶頸。我們試圖測量請求的區間 - 這沒關係。我們也測量視圖通知。看來它也不會放慢速度。然後通過View.post()查看。也許MessageQueue查看太長了?

編輯:CPU負載是巨大的,即使我們目前不能在ListView(我們沒有看到它)

回答

1

您可以參考this amazing blog post made by Romain Guy(Android Framework主要工程師之一),其中介紹瞭如何使用多個優化工具。大多數工具顯示已經包含在SDK和測量以毫秒的時間相當精確的東西,等

任何Android開發者

編輯非常有用的閱讀:

只是胡亂猜測在這裏,考慮到你的描述,也許來自移動設備的CPU負載必須處理所有信息,即使信息與它無關(你說取決於請求,你改變了適配器),爲什麼不讓服務器檢查這些數據只能發送給設備實際使用的是什麼?

0

好,每秒20個請求是移動設備本身(不只是ListView)繁重的任務。

ListView每次添加內容時都會重新載入所有內容,因此如果您在列表底部添加新項目,那麼最好只在用戶到達列表的最後一項時才加載新項目。

如果您要在列表頂部添加新項目,那麼ListView並不適合您的目的。考慮創建自己的視圖,併爲onLayout方法提供不同的實現。

編輯

另外,還要考慮使用某種緩衝,這將持有積累的信息,然後將它刷新到UI線程(而不是發佈每個請求UI線程)。