2011-10-09 16 views
1

我正在開發一款應用程序,該應用程序需要訪問給定傳感器的「最後5秒鐘的數據」。我的計劃是以某種方式存儲這些數據,然後當我請求數據時,它會返回在最近5秒內獲得的任何數據。我不知道如何有效地做到這一點,因爲:收集,存儲和檢索傳感器數據

  1. 的Dalvik不喜歡有大量的對象被創建,所以我不能讓每一個傳感器讀數包含值的對象+時間戳。

  2. 我需要不斷地以某種結構存儲新數據,同時檢索它的特定部分。

我唯一的其他要求是應該丟棄超過5秒的數據。這並不重要,但我想保留這些數據會在記憶中吃掉。

我目前有一個onSensorChanged偵聽器設置,所以我不需要幫助。

任何想法?

+0

我假設你正在與[SensorManager](http://developer.android.com/reference/android/hardware/SensorManager.html),爲什麼不要每秒都輪詢一次[Timer](http://developer.android.com/reference/java/util/Timer.html),在你認爲合適的地方存儲這些值,然後在需要時查詢這樣的存儲庫? –

+0

已經看到了SensorEventListener(http://developer.android.com/reference/android/hardware/SensorEventListener.html),所以當你獲得新的數據直到它改變。我會建議將這些信息保存在數據庫本地,並使用LoaderManager通過光標訪問 – Necronet

+0

@NanoTaboada這就是問題所在,使用哪個存儲庫以及如何查詢它? – Glitch

回答

1

也許預先分配足夠的對象來存儲5秒的數據並將它們存儲在池中。從池中獲取對象,添加時間戳和值並插入到有序集中。插入一箇舊的對象並將它們放回池中後,請刪除所有舊對象。或者也許你可以只通過一個循環緩衝區http://en.wikipedia.org/wiki/Circular_buffer

+0

我能看到的一個問題是我不知道需要多少物體。我想我可以限制傳感器的輪詢,但是這是沒有辦法讓我知道SENSOR_DELAY_FASTEST等等的真正含義,所以上限是不確定的。我想我可以在填滿時「覆蓋」對象,但如果有乾淨的方法去做,我寧願避免。 – Glitch

+0

運行一些測試或做一些計算,並得到你可能需要多少的一些想法。如果需要可能會分配更多。 –

+0

好的,這應該工作。有沒有我應該考慮實施「游泳池」的課程? – Glitch