Когда нужно сбросить обработчик обратного вызова для службы - PullRequest
1 голос
/ 01 марта 2010

у меня есть две операции A и B и одна служба C. A начинает B.

А и В:

  • являются обязательными и необязательными для Сервиса в onStart()/onStop().
  • реализует Handler -объект, который работает с сообщениями. Требуется обработчик, поэтому, если C выполняет Work и Result есть, он вернет результат или сообщение A или B.
  • реализует ServiceConnection -объект. В методе onServiceConnected от объекта ServiceConnection обработчик будет передан службе C.
  • Если я оставлю A или B, Обработчик для Сервиса будет установлен в Null в onStop(). Это связано с тем, что действие больше не активно, поэтому он не может использовать результат для выполнения каких-либо действий, например, отображения диалогового окна.

У меня есть следующая проблема:

  • Если я запускаю A и использую функцию из C, все работает нормально. Resultdialog обнаруживается.
  • Если я начну B с A, то все также будет работать нормально. Resultdialog обнаруживается.
  • Теперь, если я нажму Назад, чтобы вернуться к А, то С не сможет связаться с А, потому что обработчик по-прежнему установлен в ноль. Диалог не создан. Отображается диалог.

Я думаю, это связано с порядком вызовов метода жизненного цикла. onStart() для нового действия вызывается раньше onStop() из старого действия.

1 Ответ

0 голосов
/ 01 марта 2010

Я думаю, что вы хотите использовать onResume () вместо onStart (), потому что onStart () вызывается только тогда, когда действие первоначально запускается или перезапускается. Если B становится передним планом Activity, для A будет вызвано скрытие A, onPause (), а когда A снова становится передним планом Activity (потому что вы нажали кнопку назад), будет вызываться onResume (), а не onStart () (если только A был удален из-за нехватки памяти).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...