Android 如何在AsyncTask中调用返回值函数
我不熟悉AndRoid编程,我刚刚遇到了一个问题,在AsyncTask的Android 如何在AsyncTask中调用返回值函数,android,android-asynctask,Android,Android Asynctask,我不熟悉AndRoid编程,我刚刚遇到了一个问题,在AsyncTask的doInBackground()中调用返回值函数 简单的问题是如何等待AsyncTask完成,然后在不冻结UI的情况下执行return语句,我也研究了onPostExecute(),但它并没有解决问题。 下面是示例代码 public String hello() { String result = null; //calling asynctaske execute method retrun resul
doInBackground()中调用返回值函数
简单的问题是如何等待AsyncTask完成,然后在不冻结UI的情况下执行return语句,我也研究了onPostExecute()
,但它并没有解决问题。
下面是示例代码
public String hello() {
String result = null;
//calling asynctaske execute method
retrun result;
}
您可以从AsyncTask的onPostExecute()
创建接口并返回值,也可以注册BroadcastReceiver并从AsyncTask的onPostExecute()
方法启动。我已经创建了一个using接口和BroadcastReceiver,您可以下载并检查它。对于我自己,我使用一个回调函数,在onPostExecute之后调用它
public AsyncUnzip(Activity ctx, Observer callback) {
this.ctx = ctx;
this.callback = callback;
}
及
及
在这种情况下,对异步任务的调用如下所示:
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.
注意:这是一个快速而直接的解决方案,带有一个注释性的观察者实现,并且没有可观察的对象。这违背了异步任务的目的。您不会返回任何内容,因为任务可能会在稍后时间结束。让hello方法启动AsyncTask,onPostExecute()在UI线程上运行一些东西,修改显示输出所需的任何内容。因此hello()不能有返回类型。一旦asychtask完成,onPostexecute()方法将被调用。因此,您可以在onPostexecute()中分配值。我已经分配了,但是如何告诉下一个语句执行,除了while(result==null){},因为它冻结了解决方案中的UIZ,您已经在asyncTask之后直接完成了工作,但我必须向调用函数返回一个字符串,然后它将在iti上完成它的工作。我不理解,在Asynconus线程启动时执行.execute(..)之后的代码,在异步任务完成后执行方法update(..){}中的代码
@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.