1

我想启动两个异步任务,但第二个在第一个完成之前不会启动。

从我用谷歌搜索的内容来看,人们通常建议这种方法:

new MyAsyncTask().execute(params);
new MyAsyncTask().execute(params);

但是,我需要分别实例化它们并保留任务的句柄(例如传递消息)。因此,我有点这样做:

onStart() 
{
  taskA = new MyAsyncTask(paramsA);
  taskB = new MyAsyncTask(paramsB);
}

onButtonPress()
{
  taskA.execute();
  taskB.execute();
}

编辑:我注意到 taskB 直到 taskA 完成才真正开始执行(它运行一个 tcp/ip 服务器,所以需要很长时间)。我不知道为什么。有什么想法或意见吗?

4

1 回答 1

2

简短的回答是,根据您的 Android 版本,所有AsyncTask子类可能使用同一个线程,因此您一次只能执行一个。有两种方法可以解决这个问题:

  1. 使用Runnable代替AsyncTask
  2. 将一个呼叫替换executeexecuteOnExecutor(Executor.THREAD_POOL_EXECUTOR, params)

显然,首先尝试#2 - 它的代码更改较少。但如果这不能很快奏效,我会切换到#1。在这种情况下,您不必担心 Android 将来会发生怎样的变化。

如果您想了解更多关于线程模型的详细信息AsyncTask,请查看Android 文档条目

于 2012-10-14T02:23:16.050 回答