假设我使用以下AsycTask
(称为 A )通过互联网发送数据:
private class A extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
pd = ProgressDialog.show(context, "Notification", "Sending message...");
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
sendMessage();
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if(pd!=null && pd.isShowing())
pd.dismiss();
}
}
在doInbackground
内部称为my方法sendMessage()。我不会详细介绍这个方法,只是想象一下这个方法执行Thread
(假设它被称为B
)。
所以,问题是:
onPostExecute()
A 的AsyncTask
内的代码将在Thread
B 结束后执行?
如果没有,那么只有当sendMessage()中的AsyncTask
被终止时,如何才能执行onPostExecute?
答案 0 :(得分:1)
这很简单。只需在AsyncTask
A 的onPostExecute
中拨打AsyncTask
B 。
编辑:从ICS开始,线程内部线程无法进行。它不会给你任何错误,但它也不会工作,你的应用程序会卡在那里。
答案 1 :(得分:1)
你可以让sendMessage()
返回Thread对象,然后调用
Thread.join()
这将导致doInBackground
等待线程完成。