2011-02-14 106 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