我有一个 LocalService,它使用一些 API 公开一个 Binder。我创建了一个服务监听器,就像这样:
if (dataServiceListener == null) {
dataServiceListener = new DataServiceListener();
mainActivity.getApplicationContext().bindService
(new Intent(mainActivity, LocalService.class),
dataServiceListener.svcConn, mainActivity.BIND_AUTO_CREATE);
}
在调用Binder
indataServiceListener
公开的方法后,我在方法中得到响应dataServiceListener
onResult()
。到目前为止,没有任何问题,一切正常。当我关闭等待服务侦听器回调的 Activity 并立即重新打开它时,会出现某种问题。即使我重新实例化dataServiceListener
in onCreate()
,我得到两个回调而不是一个,旧的来自被破坏的 Activity 和后者(右)一个;这样,结果就会在 UI 上混淆。有没有办法告诉服务或服务侦听器,当活动完成时,必须避免回调。或者甚至可能销毁 ServiceListener 对象。
我认为这是 Mark L. Murphy (Commonsware) 在“The Busy Coder's Guide to Android Development”中描述的问题:
最大的收获是确保活动完成后收回侦听器。
我怎样才能做到这一点?活动结束时有没有办法摆脱无用的听众?
谢谢!