안드로이드 개발 질문/답변
(글 수 45,052)
HW : 옵티머스2X
SW : IC
중력센서, 가속센서, 지자기센서
이렇게 3센서의 값들을 실시간으로 받으려고 합니다.
컨텍스트에 한 센서만 등록하여 청취할 때는 깔끔한 값이 나오는데
한 컨텍스트에 여러 센서들을 등록하면 각각의 청취값들이 전부 다 팍 튀어버리더라고요.
(UI속도에서 초당 6번 정도, FASTEST속도에서 초당 2번 정도)
같은 타입의 센서들를 여러개 등록할땐 괜찮았습니다.
다른 타입의 센서들을 여러개 등록할때만 문제가 생기네요.
센서값을 순서대로 직렬로 받아내자니, 청취등록, 청취해제 과정 때문에 실시간 구현이 힘들고,
컨텍스트를 여러개로 나눠서 청취하자니 메모리낭비가 심할 것 같고,(여러 컨텍스트를 병렬로 돌릴 수 있는지도 의문)
요약 : 동시에 여러 센서를 청취할 시 값이 왜 튀는지 원인을 모르겠습니다.
이런 현상에 대해 아시는 분 안계신가요 ㅠㅠ




아나, 해결했네요.
단순히 포인터 문제 였습니다.
하나의 포인터로 여러 센서의 값을 받아서 서로에게 영향을 준 꼴이 됬네요.
각 센서 타입마다 리스너를 배열로 나눠놔서 개별 값이 나올 것이라고 방심했는데
문제는 한 컨텍스트에서 발생하는 SensorEvent의 포인터는 모두 같다는 것이였습니다.
onSensorChanged(SensorEvent e) { value = e.values; } 를
onSensorChanged(SensorEvent e) { value = e.values.clone(); } 으로만 바꾸니 깨끗한 값을 얻을 수 있었습니다.
동기화 문제라고 하는건가,, 하여튼 해결되서 너무 기쁘네요.
내부 동작 구조를 몰라서 생긴 문제였던 것 같습니다.