비동기 작업이 작업을 마칠 때까지 대기
저는 프로그래밍을 처음 접했고 의심이 있습니다.
나는 AsyncTask
라고 부르는 것을 가지고 있습니다 RunInBackGround
.
이 프로세스를 다음과 같이 시작합니다.
new RunInBackGround().execute();
그러나 다른 코드 명령문으로 진행하기 전에이 호출이 실행을 마칠 때까지 기다리고 싶습니다.
어떻게 할 수 있습니까?
그것에 대한 방법이 있습니까?
이 호출이 실행을 마칠 때까지 기다리십시오.
결과를 되돌리려면 AsyncTask.get () 메서드 를 호출 하고 doInBackground
실행이 완료되지 않을 때까지 기다려야 합니다. 그러나 Thread 내부에서 get 메서드를 호출하지 않으면 Main UI 스레드가 고정됩니다 .
UI 스레드 에서 결과를 다시 얻으려면 AsyncTask
다음과 같이 시작하십시오 .
String str_result= new RunInBackGround().execute().get();
코드가 병렬로 실행되는 것이 가장 좋겠지 만 앱의 사용 흐름이 기다려야하는 경우에도 UI 스레드를 차단하지 않도록 단순히 스레드를 사용하는 경우 일 수 있습니다.
여기에는 두 가지 옵션이 있습니다.
AsyncTask 자체에서 기다리는 코드를 실행할 수 있습니다. UI (thread) 업데이트와 관련이 있다면 onPostExecute 메소드를 사용할 수 있습니다. 백그라운드 작업이 완료되면 자동으로 호출됩니다.
어떤 이유로 Activity / Fragment / Whatever에서 강제로 수행해야하는 경우 AsyncTask에서 브로드 캐스트하는 사용자 지정 리스너로 만들 수도 있습니다. 이것을 사용하면 Activity / Fragment / Whatever에서 원할 때만 호출되는 콜백 메서드를 가질 수 있습니다. 즉, AsyncTask가 기다려야하는 모든 작업이 완료 될 때 호출됩니다.
다음 AsyncTask
과 같은 ProgressDialog를 추가 하십시오 .
private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);
다음 onPreExecute()
과 같은 방법으로 setMessage를 사용할 수 있습니다 .
this.dialog.setMessage("Processing...");
this.dialog.show();
귀하의 onPostExecute(Void result)
방법 에서 귀하 의 ProgressDialog
.
AsyncTask에는 네 가지 방법이 있습니다.
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는 구현해야하는 것입니다.
가장 쉬운 방법은 onpostexecute에서 데이터를 가져오고 interface에서 Ui를 실행하는 인터페이스를 만드는 것입니다.
인터페이스 생성 :
public interface AsyncResponse {
void processFinish(String output);
}
그런 다음 asynctask에서
@Override
protected void onPostExecute(String data) {
delegate.processFinish(data);
}
그런 다음 주요 활동에서
@Override
public void processFinish(String data) {
// do things
}
참고 URL : https://stackoverflow.com/questions/14827532/waiting-till-the-async-task-finish-its-work
'Development Tip' 카테고리의 다른 글
Xcode 명령 줄 도구가 설치되어 있는지 어떻게 알 수 있습니까? (0) | 2020.10.13 |
---|---|
jQuery에서 "({})"를 사용하는 이유는 무엇입니까? (0) | 2020.10.13 |
파이썬으로 잘못된 수학? (0) | 2020.10.13 |
브라우저 다운로드에서 APK를 설치할 수 없습니다. (0) | 2020.10.13 |
SVN에 파일이있는 기존 폴더를 추가하는 방법은 무엇입니까? (0) | 2020.10.13 |