2012-06-08 2 views
1

안드로이드 코드는 어떻게 처리기의 실행 가능한 프로세스가 완료되었는지 감지 할 수 있습니까? 이 특정 응용 프로그램에서는 처리를 끝내는 처리기 이외의 다른 이벤트가 생성되지 않습니다.핸들러의 실행 가능 여부를 지속적으로 테스트하는 방법은 무엇입니까?

단순히 글로벌 부울 플래그의 연속 테스트 주위에 while() 루프를 퍼팅 작동하지 않는 것 다음 while() 방법을 사용

... stuff to do before the handler's runnable is started 
while (globalBooleanFlagStatingThatRunnableIsNotYetFinished) 
        Thread.sleep(5); 
... stuff to do only after the handler's runnable is finished, like process data 

, 그 실행이 가까운 힘까지 세미콜론에서 영원히 일시 정지 표시 상기 boolean 플래그를 설정하기위한 실행 가능 여부에 관계없이, OS에 의해 푸시된다.

다른 사람들이 실행 가능한 프로세스의 완료를 어떻게 감지 했습니까?

+0

아, 잠시만 기다려주세요. 내 전화기가 실제로 녹을 수도 있습니다. 어떤 종류의 이벤트/알림/콜백/모든 것을 사용하십시오. –

답변

0

while 루프는 모든 CPU 시간을 늘려서 UI 메시지와 같이 처리 할 시간이 없습니다.

일반 픽스는 Sleep()을 루프 안에 넣습니다. 그 결과 커널을 호출하여 잠시 다른 작업 비트를 실행할 수 있습니다.

기타 콘솔과 같은 I/O은 파일 읽기/쓰기도 인쇄합니다.

0

대기 중이거나 사실 이 대기 중이라는 사실은입니다. 이는 앱의 디자인 철학에 결함이있을 수 있음을 나타냅니다. 일반적으로, 뭔가를 기다리는 중이라면 대신 처리기에 대한 응답으로 작업을 트리거하는 것입니다. 예를 들어,이 경우 onClick 이벤트를 처리 할 수 ​​있습니다. 당신이 스레드에서 이것을 기다리고있는 경우, 왜? 대신 스레드를 제거하고 상태를 남겨두고 (상태 시스템을 사용하여 연속을 구현하는) 일부 상태를 남겨두고 onClick을 호출하면 나머지 작업을 수행하기 위해 새 작업을 시작하십시오.

기본적으로 나는 당신이 실제로 이 필요하다는 것을 확신하지 못합니다. 여기서이 필요합니다. 대신 핸들러를 사용해야합니다.

편집 : 찾고있는 프로그래밍의 종류는 응용 프로그램의 주 스레드에서 가능하지 않습니다. 대신 수행해야 할 작업은 작업에서 작업 (즉, 플래시를 켜고 일정한 간격으로 플래시 끄기) 또는 스레드를 생성하는 서비스 인 AsyncTask을 사용하는 것입니다. 어쨌든 안드로이드 스레딩에서 읽어야 할 문제는 장기 실행 작업을 위해 메인 스레드를 사용하려고하는 것과 관련이 있습니다. 그리고 네, 가능 합니다만, "실시간 프로그래밍"이라고하지는 않겠습니다. 이것은 간단한 스레드 문제 일뿐입니다.

+0

Thanks @Kristopher - 위의 업데이트를 참조하십시오. – androidAnnie

+0

@androidAnnie 비슷한 대답을 업데이트했습니다. –

관련 문제