2012-03-10 4 views
1

나는 (내가 믿는) 나를 미치게되는 안드로이드의 TimerTask에 문제를 식별하는 데 문제가 있어요는안드로이드의 TimerTask (전화가 디버깅되지 않을 때 주로 호출되지) 항상 호출되지

시나리오는 다음과 같습니다 PhoneStateListener를 사용하여 전화를 걸고 특정 통화 시간이 지나면 소리를 재생 한 후에 타이머를 시작합니다.

모든 것이 완벽하게 작동하지만 디버그 모드 (또는 단순히 컴퓨터에 연결된 전화기)가 아니라면 사운드는 항상 소리가 나지 않습니다. 대부분의 경우 소리가 나지 않습니다.

내 가장 큰 문제는 전화가 연결되어 있지 않고 로그를 읽을 수없는 경우에만 문제가 발생하기 때문에 문제를 분명하게 식별 할 수 없다는 것입니다. 나는 한 번만 문제를 재현 할 수 있었고 (호출 후에 소리가 들리지 않음), onCallStateChanged가 호출되고 Timer가 Ok이지만 TimerTask가 호출되지 않았거나 예약되지 않았다는 것을 깨달은 로그를 읽었다.

그래서 여기에 몇 가지 질문을 읽은 후 타이머 대신 Handler를 사용했습니다. 하지만 똑같은 문제가 있습니다. 사실 Handler를 사용하면 전화기를 꽂거나 뽑기 만하면이 문제를 재현하기가 훨씬 쉽습니다 (타이머 사용하기는 소리가 나지 않는 문제를 재현하기가 더 어려웠습니다).

잘못된 일을하고 있습니까? 아니면 다른 것을 구현해야합니까? 사전에

모든 코멘트가 이해할 수있을 것이다, 감사

편집 분명히

, 전화가 즉시 호출이 시작으로 절전 모드로 전환하기 때문에 이런 일이 발생 핸들러와. 그러나 wake_lock을 사용하여이를 막지 못하면 전화기가 절전 상태 일 때 스레드를 실행하는 다른 방법이 있습니까?

답변

0

글쎄, 내가 말했던 것처럼, 통화 도중 잠자기 할 때 타이머가 멈췄다. 나는 AlarmManager를 사용하여 종료했다.

AlarmReceiver는 공용 클래스 여야하며 그렇지 않으면 receive 메소드가 호출되지 않습니다.

그러나 Timer가 왜 때때로 작동하는지 이해할 수 없습니다.

감사합니다.

관련 문제