2012-03-05 37 views
1

我正在嘗試使我自己的gps-tracker,主要用於騎自行車。我設法制作了一個可用的應用程序,至少供個人使用,但我想改進它,並添加了ContentProvider,Fragments,CursorAdapters和一項服務以接收來自GPS的onLocationChanges。將gps-location保存到sqlite不斷

但是,我真的不知道如何處理我收到的位置流。我的舊應用程序只是將它們保存到一個ArrayList,所以現在我的服務正在向我的活動發送一個廣播,將它們保存到ArrayList中。

問題是,當騎行結束時,需要5-15秒將位置保存到sqlite(是的,我正在使用編譯語句和事務),我想避免這種情況,通過保存收到時的位置。當我試圖這樣做時,我的應用程序變得沒有響應(如預期的那樣),因爲我正在UI線程中進行插入操作,而且我經常收到位置更新。

這當然是應用程序最重要的方面,那麼解決方案是什麼?

  • 我可以做插入一個線程,但由於插入一條記錄是昂貴的,我不知道它會跟上。

  • 我可以在交易中一次寫入25條記錄(或更多),但是會有一些邏輯來跟蹤保存的內容和不保存的內容。

是否有更好的用戶體驗的其他選擇?

回答

0

個人分析我認爲gps軌道在文件中會比在數據庫中嵌入更好,軌道很l大。這與嵌入數據庫中不是推薦解決方案的圖片是一樣的。數據庫只會保存一些摘要信息和對該文件的引用。當你走的時候,你可以寫出文件,所以最後不會有太大的停頓。如果您正在使用它來顯示地圖上的路徑或圖形圖等,則您在錄製時也保留本地ArrayList。這就是我在騎自行車應用程序IpBike中執行操作的方式。

+0

謝謝。這可能是需要考慮的事情,我認爲寫入文件而不是數據庫會更快。在錄製過程中是否保持文件打開? – 2012-03-06 09:26:36

+0

是的,我在一個服務中寫入文件,並保持打開狀態。我不小心沖洗它。 – Ifor 2012-03-06 10:53:10

3

使用IntentService將保存委託給另一個線程,然後使用applyBatch執行插入操作。

+0

但是,這仍然會使數據不可用於那些5-15秒(或更長的旅程),這是我想要避免的。 – 2012-03-06 07:43:04