Android 异步任务嵌套调用
假设我使用以下Android 异步任务嵌套调用,android,multithreading,android-asynctask,Android,Multithreading,Android Asynctask,假设我使用以下AsycTask(称为A)通过internet发送数据: private class A extends AsyncTask<Void, Void, Void>{ @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); pd = ProgressDialog.show
AsycTask
(称为A)通过internet发送数据:
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();
}
}
私有类A扩展异步任务{
@凌驾
受保护的void onPreExecute(){
//TODO自动生成的方法存根
super.onPreExecute();
pd=ProgressDialog.show(上下文,“通知”,“发送消息…”);
}
@凌驾
受保护的Void doInBackground(Void…参数){
//TODO自动生成的方法存根
sendMessage();
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
//TODO自动生成的方法存根
super.onPostExecute(结果);
if(pd!=null&&pd.isShowing())
pd.解散();
}
}
在doInbackground
中,调用my方法sendMessage()。我将不详细介绍此方法,只说明此方法执行线程
(支持称为B
)
因此,问题是:
AsyncTask
A的onPostExecute()
内的代码将在线程
B结束后执行
如果没有,那么如何使onPostExecute仅在sendMessage()中的
AsyncTask
将被终止时执行呢?这很简单。只需在AsyncTask
A的onPostExecute
中调用AsyncTask
B
编辑:从ICS开始,线程内的线程不可能出现。它不会给你任何错误,但它也不会工作,你的应用程序将卡在那里。你可以让
sendMessage()
返回线程对象,然后调用
Thread.join()
这将导致
doInBackground
等待线程完成。显然是@Ravi,但我的问题是理论性的,你能发布一个链接或思考一下吗。我想知道它的细节。提前谢谢。@bluebrain我没有链接,但是如果你看一下AsyncTask
的工作方式,你会发现答案很简单。你是对的,我只是在介绍join()方法,它对我很有用。