2012-10-21 79 views
1

這是我的應用程序:1 Activity,2 AsyncTask(一次發送請求,一次等待響應)。客戶端/服務器Android應用程序:兩個AsyncTask。問題

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

如何解決這個問題?爲什麼AsyncTask2.doInBackground()不起作用?

創建C/S應用程序有更好的模式嗎?

上的AsyncTask類
+0

此活動爲服務器應用嗎?點對點應用程序?或客戶端應用程序?目前還不清楚。另外,您是否將帶有setOnClickListener()的Button連接到onClick(),然後點擊/單擊它? AsyncTasks應根據API級別進行串行或並行排隊和執行。 – louielouie

+0

該活動是一個服務器/客戶端應用程序。客戶端發送一個可序列化的對象到服務器。這個也會將帶有附加數據的對象重新傳輸到具有serversocket的活動。 –

回答

0

解決的辦法是這樣的:

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

而不是

task.execute(); 

Android SDK Link - Executor

1

閱讀文檔,它說,由於Android 3.0 AsyncTasks序列化:

「Honeycomb的開始,任務是在單個線程中執行,以避免因並行執行常見的應用錯誤。」

所以基本上AsyncTask2正在等待AsyncTask1結束,因爲它正在等待連接,所以不會發生這種情況。您可以使用executeOnExecutor方法在並聯機器人運行的AsyncTask - 但它是因爲API可用11

您應該考慮使用服務或ExecutorService的:

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

相關問題