Какое событие жизненного цикла лучше всего зарегистрировать / отменить регистрацию слушателей? - PullRequest
1 голос
/ 29 июня 2011

У меня есть классы менеджера, которые воспринимают деятельность как слушателя. Я использую менеджеры для выполнения многопоточных вызовов, работы и т. Д., А затем перезваниваю слушателю (действия), когда все сделано, нужно изменить и т. Д.

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

У меня вопрос, какие события жизненного цикла лучше всего делать при регистрации. Я начал с onPause () и onResume (), которые работали хорошо, за исключением случаев, когда у меня была активность, которая выполняла какие-то действия в onActivityResult (). Поскольку onActivityResult () вызывается до onResume (), мои менеджеры не всегда регистрируются вовремя.

Нужно ли регистрироваться в onResume () И onActivityResult () или есть лучший способ подойти к этому?

Ответы [ 3 ]

2 голосов
/ 30 июня 2011

Альтернативный подход может заключаться в том, чтобы отложить обработку, выполняемую в настоящее время в onActivityResult (), до того, как слушатели будут зарегистрированы в onResume ().

Возможные способы сделать это включают отправку сообщений в очередь сообщений, например, используя Handler, устанавливая объект Runnable для вызова onResume или просто сохраняя данные результата, полученные onActivityResult ().

Это также гарантировало бы, что действие действительно вышло на передний план при вызове методов слушателя.

1 голос
/ 29 июня 2011

onResume () и onPause () являются лучшими для этого.В соответствии с документацией, onDestroy () не гарантированно будет вызываться, хотя для многих это является любимым, поэтому придерживайтесь пауз и резюме.

0 голосов
/ 29 июня 2011

Вы можете иметь дескриптор текущей активности в классе Manager. Зарегистрируйте его присутствие на onCreate() и отмените его регистрацию на onCreate() в каком-либо другом действии или onBackPressed() текущего действия.

В соответствующей заметке я бы порекомендовал архитектуру MVC (или аналогичную), в которой контроллер имеет информацию о состоянии представления (контроллер может отслеживать onCreate() и onBackPressed() каждой операции).

...