2011-12-19 2 views
2

센서 리스너를 시작할 때 센서 리스너를 시작하는 클래스가 있습니다. 이 청취자는 이벤트가 트리거 될 때 최신 센서 값을 변수에 씁니다. 클래스는 어떤 논리를 수행하고, 어떤 시점에서이 변수를 검사하여 값에 따라 진행합니다.센서 데이터를 기다리는 방법

안드로이드 센서 리스너는 센서 값이 변경 될 때만 이벤트를 트리거하기 때문에 변수를 읽을 때 값이 있다는 보장이 없습니다 (이벤트가 시작되면 반드시 이벤트를 트리거하지는 않습니다).).

따라서 내 앱이 이벤트가 트리거 될 때까지 기다려야 데이터가 없어져서 무기한 대기하지 않는 것이 좋습니다.

제 질문은이 대기 시간을 구현하는 가장 좋은 방법은 무엇입니까? 계속하기 전에 모든 X 밀리 초에서 값을 확인하는 핸들러를 사용해야합니까? 데이터가 쓰여졌을 때 청취자와 핸들러 사이에 전달되는 메시지가 있어야하며 이제 다시 시작할 수 있습니까? 더 나은 다른 옵션이 있습니까?

편집 : 클래스 논리는 UI 스레드에서 실행됩니다.

답변

1

동일한 상황에서 처리기를 사용하고 있습니다.

1

이것은 엄격하게 안드로이드뿐만 아니라 일반적인 자바 질문과도 관련이 없습니다. 이것을 구현하는기구는 java.lang.Oject 내의 컨테이너입니다. 생산자 스레드와 소비자 스레드가 액세스 할 수있는 가드 객체가 있다고 가정합니다. 소비자 스레드에서 당신은 전화 :

guard.notify[All](); 

(읽기 문서)

서비스 리스너가 될 것입니다 :

guard.wait(some_optional_delay_Look_into_javadoc); 

그런 다음 cosumer 스레드가 타임 아웃 ocurs 또는 지옥 frozes 밖으로 또는 생산자 스레드 문제가 될 때까지 기다립니다 생산자.

+0

당신이 말하는 문서에 대한 링크가 있습니까? – Glitch

+0

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html –

+0

감사합니다. 보호 된 블록을 구현하는 컬렉션 클래스가 있습니까? 아니면 수동으로 구현해야합니까? – Glitch