AsyncTask ProgressDialog 표시하지 않습니다.(일)
-
11-12-2019 - |
문제
내가 사용하는 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.
이게 도움이 되었으면 좋겠습니다.