我正在开发一个需要Activity
绑定到Service
的应用程序。我正在使用通常的bindService
和unbindService
。但是,我试图通过方向更改来保持绑定。为此,我要覆盖onRetainCustomNonConfigurationInstance
。但是我面临着问题。要调用unbind
,我检查Activity
是否以isFinishing()
结尾并且工作正常,但是会抛出Exception
,警告ServiceConnection
已泄漏。我不知道这是否可以解决。
我的主要问题是,如果轮换呼叫unbind
之后,我得到一个IllegalArgumentException
且消息未注册服务
我保留并解除了原始ServiceConnection
的绑定,但无法正常工作。
通过更改方向来保持绑定,因为连接到Fragment
的Activity
也在使用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)