2010-03-13 3 views
0

그래서 나는 TimerTask taskrun()자바 타이머 - 기능이 완료되지 않음을 알리는 기능!

onTimerComplete()의 기능 onTimerComplete()를 호출이이 같은 같습니다

private void onTimerComplete(){ 
    myFunc1(); 
    myFunc2(); 
} 

내가 확인을 Timer t 내가 예약 문제가 TimerTask

t.schedule(task, 2000);으로, 타이머가 가동되고 작업이 내 onTimerComplete()을 실행하지만 그 기능이 끝나지 않을 때. myFunc1()을 실행하지만 결코 완료하지 않습니다. myFunc2()

그러나 onTimerComplete()을 직접 호출하면 모든 것이 작동합니다.

여기 거래가 무엇입니까?

+0

문제가 해결되었습니다. 문제는 UI 스레드와 다른 스레드에서 UI 요소를 업데이트하려고 시도했는데 UI 스레드가 아니란 것을 모르는 것입니다. 그래서'Timer'를 사용하는 대신'AsyncTask'를 확장 한 클래스를 만들었고 타이머와 똑같은 일을했습니다. 이제 확장 된'AsyncTask'를 사용하면 모든 것이 잘 작동합니다! –

답변

2

myFunc1()이 시작되지만 끝나지 않으면 그 기능에 문제가있을 가능성이 큽니다.

이 함수는 별도의 스레드에서 호출된다는 점에 유의해야합니다. 두 스레드간에 원치 않는 상호 작용이있을 수 있습니다. (Description here)

다른 동시 활동에서 사용되는 일부 변수를 사용하는 경우 코드의 일부를 동기화해야 할 수도 있습니다. concurrency tutorial은 문제의 해결 방법 및 해결 방법을 알려줍니다.

+0

정보 주셔서 감사합니다. 추가 읽기/테스트시 확실히 스레딩 문제가됩니다. 저를 올바른 방향으로 가리켜 주셔서 감사합니다! –

관련 문제