1

这是我的应用程序:1 个 Activity,2 个 AsyncTask(一次发送请求,一次等待响应)。

1) onCreate()
    AsyncTask1.execute() 
    - AsyncTask1.doInBackground() wait for incomng connection. Works!
2) onClick()
    AsyncTask2.execute()
    - AsyncTask2.doInBackground() never executed.

如何解决这个问题?为什么 AsyncTask2.doInBackground() 不起作用?

有更好的模式来创建 C/S 应用程序吗?

4

2 回答 2

1

阅读 AsyncTask 类的文档,它说自从 android 3.0 AsyncTasks 被序列化:

“从 HONEYCOMB 开始,任务在单线程上执行,避免了并行执行导致的常见应用错误。”

所以基本上 AsyncTask2 正在等待 AsyncTask1 结束,这不会发生,因为它正在等待连接。您可以使用 executeOnExecutor 方法并行运行 AsyncTask - 但它从 API 11 开始可用。

您应该考虑使用 Services 或 ExecutorService:

http://developer.android.com/reference/java/util/concurrent/ExecutorService.html

于 2012-10-21T22:40:34.623 回答
0

解决方案是这样的:

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

代替

task.execute();

Android SDK 链接 - 执行器

于 2012-10-25T07:51:36.170 回答