Могу ли я вызвать startActivity () изнутри onResume ()? - PullRequest
6 голосов
/ 23 января 2012

У меня есть активность Android, которая должна вызвать другую активность (чтобы получить пароль от пользователя), прежде чем появится его собственный экран. Мой код в настоящее время делает это, вызывая startActivity () из onResume (); это вроде работает, но я получаю противоречивое поведение. Может кто-нибудь сказать мне, является ли этот подход законным или нет (и если нет, то как мне это сделать)?

Спасибо, Ричард.

Ответы [ 4 ]

7 голосов
/ 23 января 2012

Звонить startActivity() в onResume() абсолютно нормально.У меня есть много действий, которые делают это, часто в ответ на события, которые произошли, когда действие было остановлено.

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

Если вы испытываете странное поведение, я сомневаюсь, что это связано с этим.

0 голосов
/ 23 января 2012

Действительно, это законно, но в зависимости от того, что вы хотите сделать, это может быть нецелесообразно. Обычный способ - начать со «второго» действия, как это определено в манифесте, а затем передать первое действие. Еще одним способом было бы начать действие для результата, например, в. onCreate(), что можно сделать еще до вызова любого setContentView(). Есть много способов сделать это, поэтому я думаю, нам нужно немного больше информации, чтобы иметь возможность дать более точный ответ.

0 голосов
/ 23 января 2012

Звучит не очень хорошая идея.

Некоторые альтернативы:

  • Чтобы запросить пароль, вы можете использовать диалог вместо действия.

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

0 голосов
/ 23 января 2012

Вы можете вызвать startActivity () из onResume (), но это асинхронный вызов.Поэтому onResume () (и другие методы текущего действия) будут работать до тех пор, пока ОС Android не выполнит ваш асинхронный вызов startActivity () и не запустит новое действие.

несовместимое поведениеВозможно, это связано с тем, что ваша деятельность продолжается в течение неопределенного периода времени, пока ОС не загрузит новую активность.

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