Я столкнулся со странной проблемой, которая поставила меня в тупик на несколько дней.Сначала некоторая справочная информация:
У меня есть действие, которое связано со сторонним сервисом (предоставленным мне как библиотека).Эта служба отправляет асинхронные обратные вызовы клиенту (моя деятельность) всякий раз, когда клиент запрашивает выполнение действия.Служба никогда не запускается с помощью вызовов startService () и stopService ();Я выполняю связывание, когда мне нужна служба, и связываю, когда я закончу.У меня никогда не было более одного действия, связанного со службой одновременно.
Моя проблема:
Пользователь начинает мое действие (давайте назовем его экземпляром A).Я связываюсь с сервисом в onCreate () и выдаю запрос.Я получаю обратный вызов от службы и соответственно устанавливаю некоторые локальные переменные.Как только я прохожу то, что мне нужно сделать, я вызываю finish ().onDestroy () вызывается, и я затем выполняю службу привязки.На данный момент я предполагаю, что на экземпляр Service и мою деятельность больше нельзя будет ссылаться.
Теперь, после завершения A, пользователь снова запускает мою активность (давайте вызовем этот экземпляр B),Я снова связываюсь в onCreate и выдаю запрос.Однако, когда я получаю обратный вызов, я замечаю, что служба выдала обратный вызов моему старому «призрачному» экземпляру A. Теперь я использую все локальные переменные экземпляра A вместо использования этого нового экземпляра B. Я даже распечатал «this»."ссылка до привязки и снова после получения обратного вызова и была в состоянии увидеть, что ссылка изменяется с экземпляра B на экземпляр A.Выполнение в моей деятельности продолжается, но поскольку мои локальные переменные теперь неправильно устанавливаются в старое состояние в конце выполнения A, выполнение B завершается неудачей.
Итак, несколько вопросов:
- Как это возможно, что A продолжает ссылаться после onDestroy () и вызывается unbind?
- Вполне вероятно, что эта проблема может быть связана со сторонней службой, а не с моей реализацией?(опять же, у меня нет исходного кода для этой службы, я просто использую его)
Спасибо за любые идеи, которые вы все можете предложить.
-Jason