我有一个应用程序,它为某些功能使用服务。
我从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}中有条件}将决定是否应该执行代码的那部分)
注意:我已经有了解决方案,但这是一种解决方法,我真的只想放一条阻止代码的行,直到服务连接完毕。
答案 0 :(得分:0)
我从onResume调用了对该服务的一个调用,因此我需要在调用之前确保服务已连接。
您无法控制与任何其他生命周期方法相关的服务绑定时间。
在进入syncObject.wait()调用之后,应用程序只是挂起,等待永远。不仅没有达到syncObject.notify(),甚至没有调用onServiceConnected方法。
onResume()
和onServiceConnected()
都在主应用程序线程上调用。因此,你不能阻止一个人等待另一个人发生。
但这意味着我必须将调用放在onServiceConnected()内部的service方法中,这在我的情况下是有问题的(onResume中有条件确定代码的那一部分是否应该是执行与否)
更改您的代码,以执行由onResume()
或onServiceConnected()
触发的工作,以最后出现者为准。
您可能还希望重新考虑绑定服务是否适合您的用例。