这是我的应用程序: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应用程序有更好的模式吗?
答案 0 :(得分:1)
阅读AsyncTask类的文档,它说自从android 3.0 AsyncTasks被序列化后:
“从HONEYCOMB开始,任务在单个线程上执行,以避免因并行执行而导致的常见应用程序错误。”
所以基本上AsyncTask2正在等待AsyncTask1结束,因为等待连接不会发生。您可以使用executeOnExecutor方法在paraller中运行AsyncTask - 但它自API 11开始可用。
您应该考虑使用Services或ExecutorService:
http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
答案 1 :(得分:0)
解决方案是:
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
而不是
task.execute();