我用这样的行为编写了一个应用程序:" Android客户端将运行一个服务向服务器发送请求HTTP POST,服务器将返回JSON中的数据并从数据库中删除它。
我遇到的问题是:当我启动LoadDataActivity时(此活动将启动服务" GetMessage"接收来自服务器的数据)。如果我启动LoadDataActivity并立即完成此活动(Service GetMessage也将停止),这意味着我已将HTTP POST发送到服务器但我还没有收到JSON结果,而服务器在db中将其删除,所以我输了这个数据。
无论如何都有帮助我修复它,但是在完成活动时不必保持服务仍在运行?
答案 0 :(得分:0)
你正在做的是一个坏主意,你需要在这里改变一些架构。
仅仅因为您向服务器发送了HTTP请求并不意味着客户端将获得响应。你可能会失去互联网连接。路由器可能会中断。有人可以通过电线绊倒并拉出来。删除数据后但在发送之前服务器可能会崩溃。这是一个坏主意。
如果你想这样做,你应该做两件事之一:
1)让客户端向服务器发送第二个请求,告诉它现在可以删除数据。请勿在一个请求中执行此操作。
2)使用Lazy Deletion。而不是实际删除数据,添加一个列" IsDeleted"到数据库。默认值应为0.发送数据后,将其设置为1而不是删除它。然后将所有查询更改为仅返回IsDeleted为0的行。
或3)1和2合并。这是最好的答案。
至于你的直接问题 - 不,在活动结束之前没有办法强迫HTTP结果。因此,这需要在已启动但未受约束的服务中完成。 IntentService可以正常运行,因此您可以在请求完成时自动终止自身,如果另一个请求待处理,它只会启动一个新实例。