3

我目前正在开发一个必须使用多个 AsyncTasks 处理网络连接的 android 应用程序。

这是建立连接并调用处理麦克风输入的新任务的第一个任务。

private class establishConnectionTask extends
        AsyncTask<String, Integer, String> {

    @Override
    protected String doInBackground(String... params) {
        try {
            // initialize connection
            initConnection();
            MicrophoneTask micTask = new MicrophoneTask();
            micTask.execute("");
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Executed";
    }

    @Override
    protected void onPostExecute(String result) {
        mReadInputTask = new readInputTask();
        mReadInputTask.execute("");
        super.onPostExecute(result);
    }

一切正常,连接正常,我可以传输数据。MicrophoneTask 也在做它的工作。

问题来了:

onPostExecute方法中,我创建了一个新的 AsyncTask,它应该处理所有的网络输入。

这是 readInputTask 的样子:

private class readInputTask extends AsyncTask<String, Integer, String>
{

    @Override
    protected void onPreExecute()
    {
        Log.d("DEBUG", "pre");
        super.onPreExecute();

    }

    @Override
    protected String doInBackground(String... params) {
        // blocking readInput method
          Log.d("DEBUG", "doInBackground");
    }


    @Override
    protected void onPostExecute(String result) {
        Log.d("DEBUG", "post");
        super.onPostExecute(result);
    }
}

readInputTask 不知何故卡在了 readInputTask 的 onPreExecute 方法中。我得到的唯一输出是“pre”,尽管我也期望“doInBackground”和“post”。

有没有人看到错误或知道解决方案?

任何帮助表示赞赏!

4

1 回答 1

2
mReadInputTask.execute("");

当您使用AsyncTask#execute(params)时,AsyncTask 会依次执行:一个接一个。要并行执行 AsyncTask,请使用AsyncTask#executeOnExecutor(...).

从上的文档executeOnExecutor (Executor exec, Params... params)

此方法通常与 THREAD_POOL_EXECUTOR 一起使用,以允许多个任务在 AsyncTask 管理的线程池上并行运行,但是您也可以使用自己的 Executor 进行自定义行为。

于 2013-09-23T21:18:36.657 回答