문제

내가 사용하는 AsyncTask 서브 클래스에 대한 일부 배경을 처리합니다.문제는 내가 사용하여 클래스 .get() 방법 ProgressDialog 나는에서 지정 onPreExecute() 표시 되지 않습니다.

제가 잘 사용하는 경우 콜백을 내 onPostExecute() 방법입니다.

먼저 생각하는 이기 때문이었다 .get() 기 위한 프로세스를 완료할 수 없는 UI 스레드를 차단하거나 그렇지 않습니다.

할 수 있는 사람이 왜 이 동작은 경우 이 문제를 해결할 수 있는 방법에 대한 이??나는 진짜로 사용하고 싶 .get() 방법으면 내가 할 수 있습니다.

도움이 되었습니까?

해결책

저는 처음에는 받아들이는 다른 대답이 있지만 그것은 잘못입니다.

.get() 방법은 블록 UI 스레드하는 결과를 기다려 어떤 대화 상자에 표시되도 차단됩니다.이것은 예상되는 동작을 위해 이 방법입니다.

만이 유일한 대안을 사용하지 .get() 을 경우 배경 활동에 대한 모든 눈에 띄는 양의 시간과 대신 사용하여 콜백을 호출하는 활동입니다.

다른 팁

전화 AysncTask.(일) 에 UI 스 블록 UI 를 실행하는 UI 스레드를 기다리고 AysncTask.doInBackground()를 마무리합니다.이렇게 함으로써,당신은 실제로 희생의 혜택 AsycnTask,모든 코드를 실행되는 동시에 UI 실와 백그라운드 스레드(여전히는 두 개의 스레드,하지만 UI 실제 기다리는 백그라운드 스레드).

또한 명심할 것입니다 아마 ANR exception(막 5 초)을 호출하여 얻()을니다.

당신이 정말로 필요하다면,그것을 사용하는 전화는 당신의 showDialog()메서드 myAsyncTask.get():

showDialog();
myAsyncTask.execute();
myAsyncTask.get(); // <-- UI thread blocked and wait at this point.
dismissDialog();// <-- This line will be executed after doInBackground() finish.

이게 도움이 되었으면 좋겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top