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()方法,它对我很有用。