gpt4 book ai didi

android同步连接到服务

转载 作者:太空宇宙 更新时间:2023-11-03 13:26:04 25 4
gpt4 key购买 nike

我对此做了很多研究,但仍然不确定我是否可以同步连接到 android 服务。 startService() 和 bindService() 服务调用本质上是异步的,而我要做的是使此行为同步。

我尝试在从主线程启动的单独线程中编写 startService()、bindService() 和 ServiceConnection 对象初始化(包含 onServiceConnected() 等)。并且主线程一直等到 onServiceConnected() 在另一个线程上被调用并且服务对象被初始化,但是由于 onServiceConnected() 仅由主线程( http://developer.android.com/reference/android/content/ServiceConnection.html )调用,主线程由于 wait 调用而被阻塞,因此形成了死锁。

有谁知道我上面的推理是正确的还是不正确的?还有另一种方法来实现同步行为吗?或者唯一的选择是在 onServiceConnected() 回调发生后调用服务函数?

编辑:(解释它不是其他问题的完全重复)

在另一个问题中,应用程序异步连接服务并期望它像它提到的那样同步运行“通过添加各种 Log.xx,我发现 if(bindService(...)) 之后的代码实际上是在调用 ServiceConnection.onServiceConnected 之前。

但是,我已经知道这一点,问题是是否有办法同步连接该服务。

最佳答案

阻止 Android 的主线程是非常糟糕的想法。这将卡住整个手机的用户界面。

如果您试图阻止用户在开始绑定(bind)和连接成功之间执行任何操作,您可以抛出一个不可取消的对话框,但它只会持续几毫秒。

如果您的 UI 对存在的服务有很强的依赖性,那么您应该重新设计而不是。就其设计和本质而言,服务是异步的(来自 UI)和 transient 的。系统可以随时杀死它们以获得更多资源(尽管它可能不会)。如果它是软依赖项(如音频流应用程序),您应该只隐藏/更改 UI 元素,直到服务绑定(bind)。

因此,即使您找到了同步绑定(bind)的方法,我也请您作为 Android 用户和 Android 开发人员,请找到更好的方法。

关于android同步连接到服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19802093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com