2012-02-12 21 views
7

Tôi muốn viết một ứng dụng đọc nhiều va chạm cảm biến (theo thời gian) từ các cảm biến khác nhau (GPS, Acc, Gyro, Compass). Vì vậy, tôi phải điều tra nếu có một lợi thế trong việc sử dụng NDK.Android: Cải thiện tỷ lệ lấy mẫu cảm biến bằng cách sử dụng NDK và bỏ phiếu

Đây là câu hỏi của tôi:

a) Nút cổ chai khi đọc giá trị cảm biến từ cảm biến là gì? Có phải chính senosr hay Java? Tôi có thể tăng tỷ lệ bằng cách sử dụng NDK không? (Tôi nghĩ cho GPS nút cổ chai là cảm biến chính nó, nhưng tôi đã đọc rằng ví dụ như Gyro-Sensor là khá nhanh) Tôi tìm thấy this thread và có vẻ như nút cổ chai là cảm biến. Ai đó có thể xác nhận điều này?

b) Việc bỏ phiếu thay vì sử dụng EventListener có làm tăng tỷ lệ không? Cách tốt nhất để đọc các giá trị cảm biến nhanh là gì?

c) Việc sử dụng NDK có ảnh hưởng đến mức tiêu thụ điện năng của ứng dụng không? Tôi không tìm thấy bất cứ điều gì về điều này.

d) Tôi mới sử dụng Android. Có đủ khả năng để sử dụng NDK thay vì Java bình thường không? Theo điều này sample-code nó có vẻ là đơn giản để tương tác với các cảm biến bằng cách sử dụng một sự kiện-hàng đợi, nhưng bao nhiêu khả năng là nó để biên dịch mã và sử dụng nó từ ứng dụng?

Xin cảm ơn trước.

Trả lời

0

Khi bạn đăng ký người nghe cảm biến, bạn cần phải vượt qua SensorManager.SENSOR_DELAY_FASTEST đến registerListener().

Tham khảo http://developer.android.com/reference/android/hardware/SensorManager.html để biết thêm chi tiết.

+0

Cảm ơn bạn đã trả lời, nhưng đó không phải là những gì tôi yêu cầu. Câu hỏi đặt ra là nếu có lợi ích trong việc sử dụng C++ (NDK) thay vì Java (SDK). – steckl

+0

Chúng tôi đang sử dụng JNI để chuyển dữ liệu cảm biến G từ Java sang nguồn gốc và không thấy có vấn đề gì với điều đó. –

+0

Bạn có được lợi ích gì từ phương pháp của mình không? Tại sao bạn không sử dụng giao diện cảm biến của NDK trực tiếp? Đối với tôi, phương pháp của bạn không có lợi, vì tôi không thực hiện bất kỳ phép tính nào với dữ liệu cảm biến, tôi chỉ chuyển tiếp nó đến máy chủ. – steckl

0

Từ kinh nghiệm, tôi ít nhất có thể trả lời câu hỏi đầu tiên của bạn:

a) Sử dụng Java cơ bản đủ nhanh để xử lý nhiều cảm biến. Trong một trong các ứng dụng của tôi, tôi đọc Accelerometer, Gyroscope, Từ kế, Trò chơi xoay Vector và Từ kế chưa hiệu chỉnh cùng một lúc với SENSOR_DELAY_FASTEST.

Ngày đầu này, tôi cũng đã thực hiện một loạt các bộ lọc và lưu trữ dữ liệu, cũng như một số toán học quaternion để theo dõi luân chuyển. Nhìn vào dữ liệu thô (mà tôi cũng lưu vào một tệp .txt), dường như không có bất kỳ dữ liệu bị thiếu hoặc sự chậm trễ nào (sự khác biệt trung bình giữa các dấu thời gian giống như việc chạy một cảm biến đơn lẻ không có tính toán).

Vì vậy, trong trường hợp của tôi, các cảm biến đã hoạt động nhanh nhất có thể và Java vẫn giữ vững.

...

Điều đó nói rằng, nếu bạn đang thực hiện rất nhiều tính toán, sử dụng NDK có thể đáng để thử.

Các vấn đề liên quan