2011-08-02 4 views
0

자체보기가 여러 개인 사용자 지정보기가 있습니다. 이 컨테이너보기 내부의보기 중 하나를 클릭하면 매초마다 컨테이너보기 내부의 TextView를 업데이트해야하는 "타이머"스레드가 실행되도록했습니다. 매초마다 TextView를 업데이트하려고 할 때 내 문제가 발생합니다. 분명히, 생각했던 것만 큼 쉽지는 않았습니다. 나는 그렇게처럼 내 컨테이너 내부보기 Runnable를 구현하고 버튼을 눌러 타이머를 시작합니다 클릭 한 스레드 실행 : 보기에서 UI 스레드에서 실행

public void run() { 
     while(runnning) { 
      // if one second has passed, update the Textview 
     } 
} 

나는 기본적으로 그것의 의미 전형적인 할 수없는 터치 - 뷰 - 외부 계층 구조 예외를 얻을를 UI 스레드에서 실행되지 않습니다. 나는 post(Runnable)을 사용하고 싶지 않습니다. 왜냐하면 저는 스레드의 끝까지 1 초를 기다리기를 기다리고 싶지 않기 때문입니다. runOnUiThread(Runnable)을 실행하기 위해 전체 활동을 전달하는 것도 실용적이지 않습니다. 그래서 누군가이 일을 어떻게 할 수 있는지 말해 줄 수 있습니까? 누구든지 설명이 필요하면 알려주세요!

답변

0

너는 안드로이드 AsyncTask을 사용하고 싶다. 이 유형의주기적인 GUI 업데이트를 완료하는 동안 기다리는 동안 Android 고유의 구조입니다.

doInBackground에서 타이머를 실행하고 GUI를 업데이트 할 때마다 publishProgress를 호출하게하십시오. 그런 다음 onProgressUpdate에서 GUI를 업데이트하면됩니다. onProgressUpdate는 GUI 스레드에서 실행되고 doInBackground는 백그라운드 스레드에서 자동으로 실행됩니다.

+0

감사합니다. AsyncTasks로 알아 냈습니다! – Brian

0

전체 활동을 전달하면 무엇을 의미합니까 ?? UI를 업데이트 할 때마다 (예 : 1 초 후) runOnUIThread()를 호출 할 때마다이 스레드 내에 타이머 스레드를 만들어이 기능을 구현할 수 있습니다.

+0

제가 명확히 설명해 드리겠습니다. 위에서 설명한 것은 View를 확장 한 Timer라는 사용자 정의 뷰에 있습니다. Timer가 Timer 내부의 버튼을 클릭 할 때 스스로 실행될 수있게하려고합니다. runOnUiThread()가 View 내부에 없기 때문에 답이 도움이되지 않습니다. – Brian

관련 문제