我是andorid编程的新手我刚刚遇到一个问题,在AsyncTask doInBackground()
中调用返回值函数
简单的问题是如何等待AsyncTask完成然后执行return语句而不冻结UI,我还研究了onPostExecute()
但它并没有解决问题。
以下是示例代码
public String hello() {
String result = null;
//calling asynctaske execute method
retrun result;
}
答案 0 :(得分:0)
您可以创建一个接口并从AsyncTask的onPostExecute()
返回值,也可以注册一个BroadcastReceiver并从AsyncTask的onPostExecute()
方法启动。我使用Interface和BroadcastReceiver创建了一个demo,您可以下载并检查它。
答案 1 :(得分:0)
对于我自己,我使用回调函数执行此操作,我在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实现,没有可观察的。