为什么我不能使用onServiceConnected等待和通知?

时间:2014-07-04 16:01:04

标签: java android

我有一个应用程序,它为某些功能使用服务。

我从onResume调用了对该服务的一个调用,因此我需要在调用之前确保服务已连接。

我使用了这个问题is there a 'block until condition becomes true' function in java?的答案,在使用syncObject.wait()命令从我的服务调用方法之前放置一个synchronized块,并释放它,我将另一个同步块放在{ {1}}方法中的{1}}。

发生了什么事情,在进入syncObject.notifyAll()电话后,应用程序挂起,等待永远。不仅没有达到onServiceConnected,甚至没有调用onServiceConnected方法。

删除synchronized块解决了这个问题,但这意味着我必须将调用放在syncObject.wait()内的服务方法中,这在我的情况下是有问题的({{1}中有条件}将决定是否应该执行代码的那部分)

注意:我已经有了解决方案,但这是一种解决方法,我真的只想放一条阻止代码的行,直到服务连接完毕。

1 个答案:

答案 0 :(得分:0)

  

我从onResume调用了对该服务的一个调用,因此我需要在调用之前确保服务已连接。

您无法控制与任何其他生命周期方法相关的服务绑定时间。

  

在进入syncObject.wait()调用之后,应用程序只是挂起,等待永远。不仅没有达到syncObject.notify(),甚至没有调用onServiceConnected方法。

onResume()onServiceConnected()都在主应用程序线程上调用。因此,你不能阻止一个人等待另一个人发生。

  

但这意味着我必须将调用放在onServiceConnected()内部的service方法中,这在我的情况下是有问题的(onResume中有条件确定代码的那一部分是否应该是执行与否)

更改您的代码,以执行由onResume()onServiceConnected()触发的工作,以最后出现者为准。

您可能还希望重新考虑绑定服务是否适合您的用例。