AsyncTask嵌套调用

时间:2013-10-02 10:29:16

标签: android multithreading android-asynctask

假设我使用以下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?

2 个答案:

答案 0 :(得分:1)

这很简单。只需在AsyncTask A onPostExecute中拨打AsyncTask B

编辑:从ICS开始,线程内部线程无法进行。它不会给你任何错误,但它也不会工作,你的应用程序会卡在那里。

答案 1 :(得分:1)

你可以让sendMessage()返回Thread对象,然后调用

Thread.join()

这将导致doInBackground等待线程完成。