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

我的主要问题是,如果轮换呼叫unbind之后,我得到一个IllegalArgumentException且消息未注册服务

我保留并解除了原始ServiceConnection的绑定,但无法正常工作。

通过更改方向来保持绑定,因为连接到FragmentActivity也在使用Service

有没有什么办法解决这一问题?还是我也应该在ServiceConnection中创建一个Fragment

谢谢

最佳答案

您收到的ServiceConnection异常已泄漏是因为尝试将服务与serviceconnection对象绑定时,您使用了Activity上下文。因此,当设备方向更改并且保存ServiceConnection时,这将导致泄漏。

为避免泄漏,在活动中任何地方绑定和取消绑定服务期间,请使用Application Context(getApplicationContext()),这将解决您的问题,并且不会泄漏ServiceConnection。

捆绑:

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


解除绑定:

getApplicationContext().unbindService(serviceConnection)

07-27 19:05