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