gpt4 book ai didi

Android通过方向改变维护服务连接

转载 作者:行者123 更新时间:2023-11-29 19:25:47 25 4
gpt4 key购买 nike

我正在开发一个需要 Activity 绑定(bind)到 Service 的应用程序。我正在使用通常的 bindServiceunbindService。但是,我试图通过方向更改来保持绑定(bind)。为此,我重写了 onRetainCustomNonConfigurationInstance .但我面临着问题。为了调用 unbind,我检查 Activity 是否以 isFinishing() 结束并且工作正常但有一个 Exception 被抛出警告 ServiceConnection 已泄漏。我不知道这是否可以解决。

我的主要问题是,如果在轮换调用 unbind 之后,我会收到一个 IllegalArgumentException 消息 Service not registered

我正在保留并取消绑定(bind)原始的 ServiceConnection,但它不起作用。

绑定(bind)通过方向更改保持不变,因为附加到 ActivityFragment 也在使用 Service

有办法解决这个问题吗?或者我也应该在 Fragment 中创建一个 ServiceConnection 吗?

谢谢

最佳答案

您遇到异常 ServiceConnection has been leaked 是因为当您尝试将服务与 serviceconnection 对象绑定(bind)时,您使用了 Activity语境。因此,当您的设备方向发生变化并且您正在保存 ServiceConnection 时,这将造成泄漏。

为避免泄漏,在绑定(bind)解除绑定(bind) 服务期间,在您的 Activity 中的任何位置使用 Application Context(getApplicationContext()) ,这将解决您的问题并且您不会泄漏 ServiceConnection

绑定(bind):

getApplicationContext().bindService(new Intent(this, TestService.class), serviceConnection, BIND_AUTO_CREATE); 

解除绑定(bind):

getApplicationContext().unbindService(serviceConnection)

关于Android通过方向改变维护服务连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41456240/

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