저는 프로그래밍에 익숙하지 않아 의심 스럽습니다.비동기 작업이 끝날 때까지 기다리십시오.
저는 AsyncTask
입니다. 전화 번호는 RunInBackGround
입니다.
와 나는 같은이 과정을 시작합니다
new RunInBackGround().execute();
을하지만이 호출이 코드의 다른 진술로 진행하기 전에, 실행 완료 될 때까지 기다려야 바랍니다.
어떻게하면됩니까?
다른 방법이 있습니까?
저는 프로그래밍에 익숙하지 않아 의심 스럽습니다.비동기 작업이 끝날 때까지 기다리십시오.
저는 AsyncTask
입니다. 전화 번호는 RunInBackGround
입니다.
와 나는 같은이 과정을 시작합니다
new RunInBackGround().execute();
을하지만이 호출이 코드의 다른 진술로 진행하기 전에, 실행 완료 될 때까지 기다려야 바랍니다.
어떻게하면됩니까?
다른 방법이 있습니까?
대기이 호출 될 때까지 마무리의
당신은 다시 결과를 얻기를위한 AsyncTask.get() 메서드를 호출하고 doInBackground
실행이 완료되지 때까지 대기를 확인해야합니다 실행. 그러나 스레드 내에서 get 메소드를 호출하지 않으면 Main UI 스레드가 멈 춥니 다.. 코드를 병렬로 실행할 수 있다면 좋을 텐데 최적 있지만, 당신은 단순히 너무 스레드를 사용하고있는 경우 일 수있다
String str_result= new RunInBackGround().execute().get();
결과를 기다리는 방법. 기본 UI 스레드가 잠겨 있지 않습니까? 코드가 결과를 기다리는 동안 잠시 동안 진행 막대가 계속 롤링됩니다. –
@MuhammadNaderi :'AsyncTask'를'get' 메서드없이 사용하고 AsyncTask에서'onPostExecute' 메서드가 호출되어 메인 UI 스레드에서 결과를 제공합니다 –
이것은 잠시 동안 사용해온 임시 해결책입니다. 코드가 asynctask를 기다릴 필요가 있습니다.'C#'에서'await'과 같이 쓰고 메인 스레드는 잠겨 있지 않아야합니다. –
: AsyncTask
로
여기에는 2 가지 옵션이 있습니다.
대기중인 코드는 AsyncTask 자체에서 실행할 수 있습니다. UI (스레드)를 업데이트해야하는 경우 onPostExecute 메서드를 사용할 수 있습니다. 배경 작업이 완료되면 자동으로 호출됩니다.
Activity/Fragment/Whatever에서 어떤 이유로 든 강제로 수행하는 경우 사용자 지정 리스너로 만들어서 AsyncTask에서 브로드 캐스팅 할 수 있습니다. 이것을 사용하면 Activity/Fragment/Whatever 콜백 메소드를 원할 때만 호출 할 수 있습니다. 일명 AsyncTask가 기다려야하는 모든 작업을 마쳤습니다. 에서
이것은 훌륭한 답변이며 받아 들여진 것이어야합니다. 또한 다음은 AsyncTasks를 사용하여이를 수행하는 방법을 보여주는 샘플입니다. http://stackoverflow.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is -a –
당신의 AsyncTask
처럼 일해서 ProgressDialog를 추가하여 ProgressDialog
을 기각
this.dialog.setMessage("Processing...");
this.dialog.show();
하고 onPostExecute(Void result)
방법 : 당신이 좋아하는 onPreExecute()
방법 SetMessage() 할 수
private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);
.
이 추가 정보를 제공해 주셔서 감사합니다. – AndroidBeginner
AsyncTask에는 4 가지 방법이 있습니다.
onPreExecute -- for doing something before calling background task in Async
doInBackground -- operation/Task to do in Background
onProgressUpdate -- it is for progress Update
onPostExecute -- this method calls after asyncTask return from doInBackground.
당신은 그것을 onPostExecute 당신이 구현해야 할 것입니다 doInBackground()
에서 돌아온 후 호출 onPostExecute()
에 작업을 호출 할 수 있습니다.
AsyncTask의 포인트는 비동기 적이므로 나머지 코드와 동기화되지 않는다는 것입니다. – Gjordis
AsyncTask 메서드의 onPostExecute()를 사용하여 클래스에서 콜백을 가져올 수 있습니다. – DcodeChef
끝날 때까지 기다릴 필요가 없습니다. 당신이 원하는 것은 그것이 언제 끝나는지를 아는 것입니다. – njzk2