gpt4 book ai didi

android - 异步任务工作流程

转载 作者:太空狗 更新时间:2023-10-29 13:28:25 24 4
gpt4 key购买 nike

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

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

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”。

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

感谢任何帮助!

最佳答案

mReadInputTask.execute("");

当您使用 AsyncTask#execute(params) 时,AsyncTasks 是串行执行的:一个接一个。要并行执行 AsyncTasks,请使用 AsyncTask#executeOnExecutor(...)

来自 executeOnExecutor (Executor exec, Params... params) 的文档:

This method is typically used with THREAD_POOL_EXECUTOR to allow multiple tasks to run in parallel on a pool of threads managed by AsyncTask, however you can also use your own Executor for custom behavior.

关于android - 异步任务工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18968949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com