나는 callback 함수를 사용하여이 작업을 수행합니다.이 함수는 onPostExecute 후에 호출합니다.
public AsyncUnzip(Activity ctx, Observer callback) {
this.ctx = ctx;
this.callback = callback;
}
및
@Override
protected void onPreExecute() {
super.onPreExecute();
dia = new ProgressDialog(ctx);
dia.setTitle("Bitte warten");
dia.setMessage("Geodatenpaket wird entpackt...");
dia.setCancelable(false);
dia.show();
}
및 비동기 작업의 전화가 같을 것이다이 경우
@Override
public void onPostExecute(Boolean result) {
super.onPostExecute(result);
dia.dismiss();
callback.update(null, returnFolder);
System.out.println("Unzipped to: " + returnFolder.getName());
}
:
AsyncUnzip unzipThread = new AsyncUnzip(ImportActivity.this, new Observer() {
@Override
public void update(Observable observable, Object data) {//your code invoked after Async Task
} });
unzipThread.execute(selectedFile); //Start Unzip in external Thread.
참고 : 이것은 관찰자가없는 익명의 Observer 구현을 사용하는 빠르고 diry 솔루션입니다.
이것은 비동기적인 AsyncTask의 목적을 상실합니다. 작업이 나중에 끝날 수 있으므로 아무 것도 반환하지 않습니다. 안녕 방법은 AsyncTask를 시작하고 onPostExecute()는 UI 스레드에서 뭔가를 실행하여 출력을 표시하는 데 필요한 것을 수정합니다. 그러므로 hello()는 리턴 타입을 가질 수 없다. – Guykun
asicktask가 끝나면 onPostexecute() 메서드가 호출됩니다. 그러면 onPostExecute() 내에서 값을 확인할 수 있습니다. – Srinivasan
예요.하지만 할당 된 적이 있지만 while (result == null) {} (UI가 고정되어 있기 때문에) 다음 문장을 실행하는 방법을 알려주세요. – Khan