通过定位更改安装Android mantain服务

时间:2017-01-04 04:30:48

标签: android android-fragments android-service android-service-binding

我正在开发一个需要Activity绑定到Service的应用。我正在使用通常的bindServiceunbindService。但是,我试图通过方向更改来维护绑定。为此,我压倒onRetainCustomNonConfigurationInstance。但我面临着问题。要拨打unbind,我会检查Activity是否以isFinishing()结束并且工作正常但是Exception正在抛出警告ServiceConnection已被泄露。我不知道这是否可以解决。

我的主要问题是,如果轮播后调用unbind,我会收到IllegalArgumentException消息服务未注册

我保留并取消原始ServiceConnection的绑定,但它无效。

绑定是通过方向更改来保留的,因为附加到Fragment的{​​{1}}也在使用Activity

有没有解决这个问题?或者我应该在Service中制作ServiceConnection吗?

由于

1 个答案:

答案 0 :(得分:2)

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

为了避免泄漏,在绑定取消绑定服务中的任何位置,使用应用程序上下文(getApplicationContext()),这将解决您的问题,你不会泄露ServiceConnection

结合:

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

解绑定:

getApplicationContext().unbindService(serviceConnection)