2012-02-12 74 views
7

我想編寫一個應用程序,它可以從不同的傳感器(GPS,Acc,Gyro,Compass)讀取儘可能多的傳感器值(每次)。所以我必須調查使用NDK是否有優勢。Android:通過使用NDK和輪詢提高傳感器採樣率

這裏是我的問題:

a)從傳感器讀取傳感器值時,有什麼瓶頸?它是Senosr本身還是Java?我可以通過使用NDK來提高費率嗎? (我認爲GPS的瓶頸是傳感器本身,但我讀過例如陀螺儀傳感器速度很快) 我發現了this thread,它似乎是傳感器的瓶頸。有人能證實這一點嗎?

b)輪詢而不是使用EventListener會提高速度嗎?什麼是快速讀取傳感器值的最佳方式?

c)是否使用NDK對應用程序的功耗有任何影響?我沒有發現任何關於此事的信息。

d)我是Android新手。使用NDK而不是普通的Java更有價值嗎? 根據這個sample-code,使用事件隊列與傳感器交互似乎很簡單,但編譯代碼並從應用程序使用代碼有多少功能?

在此先感謝。

回答

0

當你註冊你的傳感器監聽器時,你需要通過SensorManager.SENSOR_DELAY_FASTESTregisterListener()

有關更多詳細信息,請參閱http://developer.android.com/reference/android/hardware/SensorManager.html

+0

謝謝你的回答,但那不是我要求的。問題在於如果使用C++(NDK)而不是Java(SDK)會有好處。 – steckl 2012-09-23 14:18:02

+0

我們使用JNI將來自Java的G傳感器數據傳遞給本機,並發現沒有問題。 – 2012-09-23 14:43:14

+0

你從你的方法中獲益嗎?你爲什麼不直接使用NDK的傳感器接口? 對我來說,你的方法沒有任何好處,因爲我不對傳感器數據做任何計算,只是將它轉發給服務器。 – steckl 2012-09-23 15:06:45

0

從以往的經驗,我至少可以回答前您的問題:

a)使用基本Java是用於處理多個傳感器不夠快。在我的一個應用程序中,我使用SENSOR_DELAY_FASTEST同時讀取了加速度計,陀螺儀,磁力計,遊戲旋轉矢量和未校準磁力計。

除此之外,我還做了一堆過濾和存儲數據,以及一些四元數學來跟蹤旋轉。查看原始數據(我也將其保存到.txt文件中),似乎沒有任何丟失的數據或延遲(時間戳之間的平均差異與運行單個傳感器而沒有計算相同)。

所以在我的情況下,傳感器的工作速度和Java保持良好。

...

這就是說,如果你正在做的非常大量的計算,使用NDK可能是值得一試。