我的活動是下載並顯示公告(來自公告web服務)。爲了保持UI響應我下面在後臺線程操作:Android:使用多線程使UI響應(實現平滑滾動)
1)上傳XML(數據存儲在XML),
2)處理XML,
3)上傳圖片。
再說,我更改用戶界面和後臺線程的優先級,以保持UI線程響應:
在主線程:
Thread.currentThread().setPriority(10);
在後臺線程:
Thread.currentThread().setPriority(1);
每個公告被放在到TableRow中,並且每個TableRow都使用處理程序放在TableView中。 當用戶滾動TableView並即將到達表的末尾時,會添加新行併發送下一個通告的HTTP-GET(+ parcing(使用XPath)+圖像上傳+填充帶有內容的錶行)。
我的問題:
上傳和解析是在過程的用戶界面時是隻有部分反應(有一些滯後0.1-0.5sec每當用戶滾動TableView中)。
我想做絕對平滑的滾動不依賴於數據上傳/處理。
以錯誤的方式做了什麼,還有什麼可以在這裏完成? 例如,如果我減少處理程序中的操作次數,它應該會提高響應能力......也許就是這樣。但是,我看不到那裏耗費大量資源的指令。
UPDATE
我使用的ListView來代替TableLayout改寫了我的代碼,因爲前者是相當快的(事實證明,我不知道)。但是,當XML處理和ListView滾動同時進行時,我仍然會出現尖峯。我做了2個實驗:
1)我刪除了所有後臺進程 - 向下滾動時向ListView添加了新行,但沒有爲這些行處理數據(所以它們保持爲空) - 此類變體工作良好,沒有任何秒殺,UI絕對響應。
2)第二個實驗是移除對ListView更新的調用(XML文件已處理,但發現的數據未傳遞給ListView適配器) - 那次我有尖峯。所以我得出結論這些尖峯是由於後臺線程,並不是由於UI更新調用。 如果讓我們的應用程序的優先級低於主應用程序的優先級,後臺線程如何減慢我的應用程序?
是
Thread.currentThread().setPriority(some_int);
設置線程的優先級以正確的方式?
剖析你的代碼,看看究竟是什麼導致了滯後。看看:http://developer.android.com/guide/developing/debugging/debugging-tracing.html – Ash