我正在开发一个需要Activity
绑定到Service
的应用。我正在使用通常的bindService
和unbindService
。但是,我试图通过方向更改来维护绑定。为此,我压倒onRetainCustomNonConfigurationInstance
。但我面临着问题。要拨打unbind
,我会检查Activity
是否以isFinishing()
结束并且工作正常但是Exception
正在抛出警告ServiceConnection
已被泄露。我不知道这是否可以解决。
我的主要问题是,如果轮播后调用unbind
,我会收到IllegalArgumentException
消息服务未注册
我保留并取消原始ServiceConnection
的绑定,但它无效。
绑定是通过方向更改来保留的,因为附加到Fragment
的{{1}}也在使用Activity
。
有没有解决这个问题?或者我应该在Service
中制作ServiceConnection
吗?
由于
答案 0 :(得分:2)
您收到异常 ServiceConnection已泄露是因为当您尝试使用 serviceconnection 对象绑定服务时,您已使用了Activity上下文。因此,当您的设备方向发生变化并保存ServiceConnection时,这将导致泄漏。
为了避免泄漏,在绑定和取消绑定服务中的任何位置,使用应用程序上下文(getApplicationContext()
),这将解决您的问题,你不会泄露ServiceConnection
结合:
getApplicationContext().bindService(new Intent(this, TestService.class), serviceConnection, BIND_AUTO_CREATE);
解绑定:
getApplicationContext().unbindService(serviceConnection)