控制在AsyncTask的onPostExecute()方法之后返回到何处?

时间:2013-06-11 01:26:25

标签: android android-asynctask

我有一个AsynchTask,它在我的MainActivity中的函数中调用。 执行onPostExecute方法后,控件似乎没有返回到我调用AsynchTask的函数。

public class MainActivity extends FragmentActivity {

private class GetPlaces extends AsyncTask<AsynchInput,Void,AsynchOutput>{

    protected AsynchOutput doInBackground(AsynchInput... placesURL) {

        ...
    }

    protected void onPostExecute(AsynchOutput result) {
     ....
    }


}


public void showInterestingPlacesNearby(GoogleMap myMap,Location loc){

    ....
    ...

    new GetPlaces().execute(new AsynchInput(myMap,placesSearchStr));


}   

}

我在新的新GetPlaces()。execute之后编写的代码不会执行。在AysnchTask返回后如何继续。

编辑:我使用AsynchTask作为MainActivity的内部类。

3 个答案:

答案 0 :(得分:0)

AsyncTask用于在 UI线程的后台线程上运行代码。这不像函数调用那样,并且使用.execute()调用之后的语句继续执行 。同时,AsyncTask的doInBackground中的代码在后台线程上执行,并在不阻塞UI线程的情况下运行。这是预期的行为,没有它使用AsyncTask将毫无意义。

响应异步操作结束的唯一方法是在onPostExecute内执行此操作 - 如果您需要采取某些操作来响应您的后台代码,您也可以在onProgressUpdate内执行操作

因此,在showInterestingPlacesNearby()调用后,您的.execute方法无需执行任何操作 - 您要在其中执行的代码可能会进入onPostExecute

或者,您可以使用onProgressUpdate处理找到的项目,而不是等待整个异步操作完成,然后立即显示所有内容。为此,只要找到了某些内容,就需要在publishProgress中使用doInBackground

答案 1 :(得分:0)

可能的解决方案可能是: 在.execute之后输入您输入的代码并将其放入私有方法

private void AfterTask() {
//your code written after .execute here
}

在onPostExecute中,只需调用该方法

protected void onPostExecute(AsynchOutput result) {
    AfterTask();
}

答案 2 :(得分:0)

myTask.execute("url");
String result = "";
try {
      result = myTask.get().toString();
} catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
}catch (ExecutionException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
}