Android 코드에 센서 값을 파일에 덤프하는 이벤트 처리 메커니즘이 있습니다. 지금 당장은 UI UI 스레드에서이를 수행하고 있으므로 UI 버튼의 응답 속도가 매우 느리고 속도를 높이고 싶습니다.Android에서 이벤트 핸들링 함수 (SensorListeners)에 MultiThreading을 사용하는 방법
이벤트 처리 기능에서 멀티 스레딩을 어떻게 사용할 수 있습니까? 나는 이것을 다음과 같이하려고 애 쓰고있다.
- 글로벌 변수 writeNow를 만든다.
- 는 센서 값이 변경 설정되면 WriteNow = TRUE
과 같다 클래스에서 스레드 생성 :
Thread thread1 = new Thread() { public void run() { if(writeNow == true) { try { fos.write(s.getBytes()); } catch (IOException e) { e.printStackTrace(); } writeNow = false; } } };
따라서 writeNow가 참일 때마다, 그것은 쓸 것 File을 누른 다음 WriteNow를 false로 설정합니다. 그러나 스레드가 한 번 실행 된 다음 실행이 중지되기 때문에 이것이 올바른 접근 방식이 아니라는 것을 알고 있습니다. while (true) 및 wait()를 사용하여 간단한 예제를 시도했을 때 스레드가 수백만 번 중단되었음을 발견했습니다.
그래서 프로세스 가속화를 위해이 이벤트 처리 메커니즘을 단일 스레드로 묶으십시오.
감사합니다.
이유는 100ms의 잠을해야합니까? 왜 항상 실행하는 동안 (사실) 유지하지? 실제로이 코드 조각을 시도했지만 UI 응답 성은 전혀 향상되지 않습니다 ... – Imelza
스레드가 '잠자기'되지 않고 100 밀리 초일 필요는 없지만 응용 프로그램에 따라 다릅니다. 다른 스레드에 실행 기회가 주어집니다. 모든 시스템 리소스를 처리하는 유일한 스레드 인 경우 UI 스레드와 다른 스레드가 충분한 CPU 시간을 확보 할 수 없으므로 장치가 일반적으로 느려집니다. [busy waiting] (https://secure.wikimedia.org/wikipedia/en/wiki/Busy_waiting)을보십시오. –
# 1 또는 # 3 접근 방법을 시도 했습니까? 'wait/notify'는 소비자 - 생산자 문제에 대한 일반적인 접근법입니다 - 제가 연계 된 튜토리얼을보십시오. 그리고 # 1의 코드는 거의 완성되었습니다. 쓰기 로그인을 거기의'run()'메소드로 옮기면됩니다. 그래도 여전히 도움이되지 않으면 문제가 다른 곳에 있습니다. –