我有一个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的内部类。
答案 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();
}