服务回调引用我活动的旧“ghost”实例

时间:2011-08-29 15:40:48

标签: android android-activity android-service

我遇到了一个奇怪的问题,现在让我难过了几天。首先是一些背景信息:

我有一个与第三方服务绑定的活动(作为库提供给我)。只要客户端请求执行操作,此服务就会向客户端(我的活动)发送异步回调。该服务永远不会以startService()和stopService()调用启动;当我需要服务时执行绑定,当我完成时解除绑定。我在任何时候都不会有多个活动绑定到该服务。

我的问题:

用户启动我的活动(让我们称之为实例A)。我绑定到onCreate()中的服务并发出请求。我收到服务的回调并相应地设置一些局部变量。一旦我完成了我需要做的事情,我就打电话给finish()。调用onDestroy()然后执行un bind服务。我现在的假设是服务实例和我的活动都不能再被引用了。

现在,在A完成后,用户再次启动我的激活(让我们调用此实例B)。我再次绑定onCreate并发出请求。然而,当我收到回调时,我注意到该服务已经回复了我的旧“ghost”实例A.我现在使用所有实例A的局部变量而不是使用这个新实例B.我甚至打印出“这个“在绑定之前引用,在收到回调之后再次引用,并且能够看到引用从实例B更改为实例A的。我的活动中的执行继续进行,但由于我的局部变量现在在A执行结束时被错误地设置为旧状态,因此B的执行失败。

所以有几个问题:

  1. A之后是如何被引用的? 调用onDestroy()和unbind?
  2. 此问题是否可能与第三方有关 服务而不是我的实施? (再说一次,我没有 这个服务的源代码,我只是使用它)
  3. 感谢您提供任何见解。

    -Jason

1 个答案:

答案 0 :(得分:0)

原来这是第三方服务。