2012-01-10 46 views
0

Android應用程序有兩個活動。在沒有滯後的情況下爲後臺線程上的視圖加載數據的最佳做法

活動A顯示項目列表。活動B顯示關於特定項目的一些細節。

詳細信息從一個龐大的SQLite數據庫中加載。用於生成數據的查詢在合理的電話上花費大約250到500毫秒。

我的問題是什麼是加載數據,同時提供良好的用戶體驗的最佳做法。

當前活動B在創建時執行AsyncTask。任務完成後,它會創建多個視圖並將它們添加到屏幕中。沒有數據在UI線程上加載。

對於用戶活動B以漂亮的標準縮放動畫打開,然後幾分之一秒後,視圖會填充數據。它看起來有點廢話國際海事組織。

另一種選擇是在UI線程上加載數據。如果我在正確的時間這樣做,那麼屏幕將凍結選定的列表項目250ms,同時加載數據,然後視圖會隨標準縮放動畫而變化,但它會放大到已填充的視圖。它看起來好多了,但我阻止了不理想的UI線程。

當新視圖尚未準備好時,實現良好過渡的最佳方式是什麼?

+0

在加載數據時將進度對話框放在活動A的頂部,添加取消可能性,最重要的是在單獨的線程中加載。由於這是網絡操作,您不應該依賴接收響應,並且可以讓用戶輕鬆取消操作。恕我直言,這是。 – harism 2012-01-10 05:23:25

+0

這不是網絡操作。 – 2012-01-10 05:31:26

回答

2

要麼把一個progress dialog加載數據的任務,如果你不這樣做的話..

您可以使用AsyncTaskonProgressUpdate()方法從隔開間隔數據庫更新導致數據UI ..

protected void onProgressUpdate(Integer... progress) { 
     //this runs in UI thread so its safe to modify the UI 
     myTextField.append("finished call " + progress); 
    } 

•onProgressUpdate - 在後臺任務中調用publishProgress時調用,用於將進度報告回UI。

您也可以使用LIMIT併爲您select query用於提取大量從數據庫中數據的獲取從返回的結果的綁定號碼數據庫數據OFFSET條款sqlite database ..

例子:

Select * from Animals LIMIT 100 OFFSET 50 
+0

謝謝,在我的用例中,這實際上是一個非常好的主意。屏幕最重要的部分加載非常快。 – 2012-01-10 05:32:29

+0

歡迎回來+1,給我一個很好的答案。 – 2012-01-10 05:32:45

+0

@ user370305是的,我從很多天以來一直在尋找你。我希望你能夠在一些房間裏進行訪問以進行[聊天](http://chat.stackoverflow.com/rooms/1531/casual-chat)。 – 2012-01-10 05:37:24

相關問題