Android 阻止IntentService创建
我的应用程序从IntentService调用其web服务。每个意图实际上都是一个需要进行的web服务调用 如您所知,IntentService将Intent排队;因此,在任何给定的时间只有一个web服务调用发生。这实际上是期望的行为 然而,这确实存在一个问题。假设我的应用程序在此IntentService中排队等待5个意向。假设用户最终出现在一个屏幕上,当从web服务检索某些数据时,该屏幕可能会显示UI。如果将此web服务的意图放在队列的后面,那么在调用web服务之前可能需要很长一段时间,这会让用户耽误不可接受的时间 因为我不能将意图注入到IntentService队列的前端(据我所知),所以我决定为需要立即执行的调用创建第二个IntentService。由于我只希望在任何给定时间有一个调用命中我的服务,所以我在实际的Http代码周围包装了一个互斥体。因此,在本例中,Intent将立即执行(因为它位于不同的IntentService中),但在互斥体上循环,直到另一个IntentService中的任何调用完成 这对我有好处;我对这一切都很满意 我的问题是: 理论上,新的IntentService也可以排队。由于应用程序工作流的原因,这种情况不太可能发生,但在理论上是可能的。如果是这种情况,我希望新的IntentService在原始IntentService再次恢复之前完成。我的想法是在新IntentService的create和destroy方法中锁定/解锁一个新的互斥锁。在旧IntentService的OnHandleContent方法的开始和结束处,同样的互斥锁也将被锁定/解锁。但是,我关心的是,在创建IntentService时锁定互斥锁会产生什么样的后果,从而阻碍其创建(可能会在锁定之前调用super.create)。意向者还能排队吗?这样做还有其他陷阱吗 因为我不能将意图注入到IntentService队列的前端(据我所知) 而不是标准实现。然而,Android 阻止IntentService创建,android,service,synchronization,mutex,Android,Service,Synchronization,Mutex,我的应用程序从IntentService调用其web服务。每个意图实际上都是一个需要进行的web服务调用 如您所知,IntentService将Intent排队;因此,在任何给定的时间只有一个web服务调用发生。这实际上是期望的行为 然而,这确实存在一个问题。假设我的应用程序在此IntentService中排队等待5个意向。假设用户最终出现在一个屏幕上,当从web服务检索某些数据时,该屏幕可能会显示UI。如果将此web服务的意图放在队列的后面,那么在调用web服务之前可能需要很长一段时间,这会让
IntentService
并不是一个大类。您可以克隆它,并将它现在使用的基于处理程序的系统替换为优先级阻塞队列
这样做还有其他陷阱吗
除了把我吓得屁滚尿流,就可能的僵局而言
您可以沿着这些线查看或查看其他内容,而不是Mutex
对。虽然从技术上讲,您的场景不是“读”对“写”的场景,但您可以将“读”和“写”简单地视为两个优先级。有一些方法可以配置这样一个锁来支持“写入”,因此您的第二个IntentService
将是“写入”,而您的第一个IntentService
将是“读取”
但是我真的希望用一个具有您所寻求的特征的类似工作来替换IntentService
,而不是试图让两个IntentService
一起工作。我想我会考虑修改IntentService类,允许我将intent注入队列的前端。我很有信心我目前的计划不会出现僵局,但值得调查以避免任何可能性。谢谢你的帮助。