2011-04-06 3 views
0

내 활동은 인터페이스 IProcess를 구현합니다.Android, 다른 클래스의 익명 스레드에서 인터페이스 메소드 호출

doProcess()라는 정적 메서드가있는 Scaler라는 클래스가 있습니다.

doProcess에는 실행될 때 진행 상황을 업데이트하는 처리 방법을 호출하는 익명 스레드가 들어 있습니다.

프로세스가 내 말은, 그러나, 나는 대화 상자가 표시되어야합니다 지점에서 예외를 얻고, 대화 상자를 표시하는 아이 프로세스를 구현 내 활동에 대한 인터페이스 메소드를 호출 할 수행

:

04-06 08:43:54.048: ERROR/AndroidRuntime(6832): java.lang.RuntimeException: 
Can't create handler inside thread that has not called Looper.prepare() 

내가 뭘 잘못하고 있는데, 주된 활동에 대화 상자를 다시 표시하는 다른 방법이 있다면 (틀린 경우) 어떻게해야할까요?

답변

1

UI 스레드를 다른 스레드에서 알리려면 Handlers을 사용해야합니다.

+0

자세히 설명해 주시겠습니까? 내 인터페이스 호출을 실행 파일에 넣고 처리기로 게시하려고 시도했지만 실행 파일에 인터페이스에 대한 참조가 없습니다. – Hamid

0

"one-shot"배경 인 경우 doInBackground()에서 processin을 수행하고 publishProgress()을 호출하면 AsyncTask을 사용할 수 있습니다. 그런 다음 UI 요소를 조작 할 수있는 위치에서 onProgressUpdate()을 호출합니다.

당신은 여기에서 예를 찾을 수 있습니다

: https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L328

PublishProgess 예를 들면이다 라인 391 및 403에서 호출되고 onProgressUpdate는 라인 451에서 시작됩니다.

documentation for AsyncTask도 참조하십시오.

+0

이것은 한 번만 수행되는 프로세스이므로 한 번만 수행하면됩니다. 내가 이것을 어떻게 사용할 수 있는지에 대한 예가 있습니까? – Hamid

+0

감사합니다. 흥미로운 읽기입니다. ASyncTask에서 응용 프로그램 자산에 액세스하는 데 문제가있어서이 방법을 사용하지 않기로했습니다. – Hamid

관련 문제