Java 后台线程被阻止时服务未接收到意图

Java 后台线程被阻止时服务未接收到意图,java,android,multithreading,android-intent,Java,Android,Multithreading,Android Intent,我有两个Android应用程序通过Intent相互通信。让我们叫他们A和B(不是他们的真名)。在正常情况下,我们有以下几点: A的后台线程向B发送意图 A的后台线程与Object.wait阻塞,超时30秒 B使用Context.startService将意图发送到A A在主线程上的Service.onstart命令中接收意图 A将意图中的信息保存在可从后台线程访问的位置 从主线程,A调用Object.notifyAll以释放后台线程 A中的后台线程处理结果 多年来,它一直运行良好,对于一个特

我有两个Android应用程序通过Intent相互通信。让我们叫他们AB(不是他们的真名)。在正常情况下,我们有以下几点:

  • A的后台线程向B发送意图
  • A的后台线程与Object.wait阻塞,超时30秒
  • B使用Context.startService将意图发送到A
  • A在主线程上的Service.onstart命令中接收意图
  • A将意图中的信息保存在可从后台线程访问的位置
  • 从主线程,A调用Object.notifyAll以释放后台线程
  • A中的后台线程处理结果
多年来,它一直运行良好,对于一个特定的客户来说,它在他们300台设备中的98%都能正常工作

现在的问题是,这个过程在少数设备上失败了。当A中的后台线程被阻塞时,从BA的意图被延迟。一旦后台线程不再被阻塞(它有30秒的超时),主线程上的a将立即接收到意图,即使主线程从未被阻塞。因此,我们:

  • A的后台线程向B发送意图
  • A的后台线程与Object.wait阻塞,超时30秒
  • B使用Context.startService将意图发送到A
  • A的后台线程超时,不再关心意图
  • A在主线程上的Service.onstart命令中接收意图
  • A中的意图被丢弃,因为没有任何东西在等待它
  • A的后台线程将重试,无限期地再次启动进程
AppB似乎不是问题所在。它在不到一秒钟的时间内完成了它应该做的一切。我已确认A中的主线程未被阻止。UI在整个过程中都保持响应,我在这个过程中尝试在主线程上定期运行代码,以确认它应该准备好接收意图。这个问题只是在最近几周才开始出现的,并且没有代码更改。我不知道设备上运行的其他应用程序有任何变化,但我认为它们不应该导致这个问题。我不知道操作系统有任何更新,但它们似乎都运行相同的版本。因此,如果这是一个bug,我希望在所有设备上都能看到它,而不仅仅是少数设备。根据客户的报告,经过一段较长的时间,并多次重试此代码后,它将突然工作。但是,再尝试一下这个过程,它会再次陷入困境


我希望有人看到过类似的情况,并且/或者能够提出这种行为的可能原因。我倾向于认为这是对环境的设备,但我不知道是什么原因造成的。我完全被这个问题所困扰,我目前正在研究一种变通方法,我任意改变这个过程的工作方式,以达到相同的结果,只是希望问题能神奇地消失。

可能是用户强制停止后台服务。因此,请先检查。@MukeshKumarSwami我亲眼目睹了这一情况,当时我正在查看一台有问题的设备,但我没有杀死任何服务。我尝试卸载各种东西,但没有效果。