2011-02-14 104 views
1

我希望我的應用程序的Web服務調用同步,因此在任何給定時刻只有1個正在執行。跨進程同步Web服務調用

我創建了一個名爲WebService的對象,它需要發送數據(請求),將數據發送到Web服務,獲取響應並將其踢回到調用WebService對象的任何代碼。

我已經爲WebService對象添加了一個計數爲1(即:mutex)成員變量的信號量。這個成員變量是一個靜態的。它在發送之前被鎖定,在發送之後被解鎖。

不幸的是,它的運行不正常。我的大部分代碼都會啓動一個IntentService並進行Web服務調用。其他一些Web服務發生在應用程序進程中的AsyncTasks中。我認爲,因爲這是兩個獨立的進程(?),所以靜態互斥不會跨越兩個(?)。

有人對我如何在應用程序的進程中發生某些事件並同時發生某些服務時同步我的Web服務調用有任何建議嗎?

回答

0

其他一些Web服務發生在應用程序的進程中的AsyncTasks中。我認爲,因爲這是兩個獨立的進程(?),所以靜態互斥不會跨越兩個(?)。「

除非你強迫它們在單獨的進程中(壞),否則它們將在同一個進程

有沒有人有任何建議,當一些應用程序的過程中發生,在一些服務發生,我如何能夠同步我的Web服務調用

簡單:?讓他們全部由服務處理,而不是使用AsyncTask,只要有電子活動startActivity()在您的IntentService,與額外等,以傳遞任何必要的數據。由於IntentService使用單線程處理傳入的Intents,因此您甚至不需要Semaphore

+0

感謝您的回覆。我的大部分Web服務調用確實發生在IntentService中,但少數情況發生在AsyncTasks中。這些通常用於獲取某些數據以在可丟棄的特定屏幕上顯示。此外,這些AsyncTasks由不讀取/寫入數據庫的屏幕啓動。數據傳入並在Activity開始時使用。我不太清楚如何在不使用BroadcastReceiver的情況下將數據從IntentService傳遞到Activity,如果在Web服務完成之前啓動新的Activity並取消註冊BroadcastReceiver,這將不起作用。 – Andrew 2011-02-14 17:47:30