我对此进行了大量研究,但仍不确定是否可以同步连接到android服务. startService()和bindService()服务调用本质上是异步的,而我想做的是使此行为同步.
我尝试在从主线程启动的单独线程中编写startService(),bindService()和ServiceConnection对象初始化(包含onServiceConnected()等).并且主线程等待,直到在另一个线程上调用onServiceConnected()并初始化服务对象为止,但是由于onServiceConnected()仅由由于等待调用而阻塞的主线程(http://developer.android.com/reference/android/content/ServiceConnection.html)调用,因此形成了死锁.
有人知道我上面的推理是正确/错误吗?还有另一种方法来实现同步行为吗?还是唯一的选择是在发生onServiceConnected()回调后调用服务函数?
编辑:(以解释它不是其他问题的确切重复)
在另一个问题中,应用程序异步连接该服务,并期望它同步运行,因为它提到“通过添加各种Log.xx,我发现if(bindService(…))之后的代码实际上在ServiceConnection之前. onServiceConnected正在被调用”.
但是,我已经意识到了这一点,问题在于是否有一种方法可以与服务同步连接.
解决方法:
阻止AndroID主线程是一个非常糟糕的主意.这将冻结整个手机的UI.
如果您试图阻止用户在开始绑定和连接成功之间执行任何 *** 作,则可能会抛出一个不可取消的对话框,但这只会持续几毫秒.
如果您的用户界面对提供的服务有严格的依赖,那么,您应该重新设计,而不是重新设计.根据其设计和性质,服务是异步的(来自UI)和瞬时的.该系统可以随时杀死它们以获取更多资源(尽管可能不会).如果是软依赖性(例如音频流应用程序),则应仅隐藏/更改UI元素,直到服务绑定为止.
因此,即使您找到一种进行同步绑定的方法,但我还是以AndroID用户和AndroID开发人员的身份要求您,请找到一种更好的方法.
总结以上是内存溢出为你收集整理的android同步连接服务全部内容,希望文章能够帮你解决android同步连接服务所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)