Оттеснение всегда заставляют Действие заканчиваться ()?

Я услышал, что нажатие кнопки "Назад" по существу вызовет текущее Действие к finish(). Этот всегда имеет место? Кажется, что это было бы со способом, которым это выталкивает Действие от стека.

Одна ситуация, в которой я не так уверен, состоит в том, когда корневое Действие в Задаче назад нажало. Я в настоящее время испытываю очень странный эффект, описанный следующим образом:

При загрузке моего приложения первое Действие для инициализации, и после того как это заканчивается, это называет мой основной вид деятельности (TabActivity). Это сначала init действие имеет android:noHistory =, "истинный" набор в Декларации, настолько оттесняющей от моего основного вида деятельности, не вернется к этому. Это переходит к Средству запуска. Когда я нажимаю на свое Приложение в Средстве запуска во второй раз, действие инициализации загружается снова и загружает основной вид деятельности при выполнении. Почти сразу после, это загружает второй экземпляр моего основного вида деятельности. Но ТОЛЬКО после того, как Приложение было уже запущено однажды и вышлось путем оттеснения от основного вида деятельности. Это делает это в каждый последующий раз, пока я не вызываю, выходит из приложения или загружают новую версию из IDE.

На основе этого я подозреваю, что некоторый экземпляр Действия лежит вокруг и снова используется, так как это только происходит на втором + время, я запускаю приложение (и выход с ОБРАТНЫМ - использующий ДОМОЙ просто возвращается к последнему состоянию приложения, никакого грандиозного предприятия). У кого-либо есть какие-либо мысли??

17
задан stormin986 10 May 2010 в 07:19
поделиться

4 ответа

Я слышал, что нажатие кнопки «Назад» приведет к завершению текущего действия (). Так всегда бывает?

Нет, это не так. Большинство занятий имеют такое поведение, но не все. Например, вы можете создать диалоговое окно и установить его setCancelable (false) , и он не закроется, если вы нажмете кнопку НАЗАД.

Кроме того, вы можете настроить поведение при нажатии кнопки НАЗАД, переопределив onBackPressed

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

О поведении вашего приложения .. Вы проверили, завершилась ли программа запуска действий после того, как она загрузила ваше основное действие? Я имею в виду, если вызывается метод onDestroy (). Может быть, после того, как он запустит основное действие, он останется там, и когда вы нажмете кнопку «Назад», вы просто вернетесь в старую Launcher ...

надеюсь, что это поможет ..

11
ответ дан 30 November 2019 в 13:45
поделиться

Выполняете ли вы свои действия с какими-либо специальными флагами, такими как singleInstance или singleTop? Они могут вызывать странности, которые вы видите. Самый простой способ отследить причину вашей проблемы - полностью заполнить ее отладочными сообщениями. Например:

  1. В вашем действии инициализации добавьте журнал в начало onCreate, чтобы получить имя действия, такое как this.toString (). Подробнее о том, почему вам нужна эта строка, позже.
  2. Когда он запускает основное действие с вкладками, получите название действия и сообщение о том, что оно запустило действие с вкладками.
  3. Переопределите обратные вызовы onPause (), onStop () и onDestroy () и добавьте строки отладки с помощью this.toString (), а также сообщение о том, какой это обратный вызов.

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

Если вы не знаете, как отлаживать, используйте Log.d (LOG_TAG, «Ваше сообщение здесь»); . А затем определите где-нибудь постоянную строку LOG_TAG. После этого покажите перспективу LogCat в Eclispe, перейдя в Window, покажите перспективу (или представление, точно не помню), другое, Android, LogCat. Целью наличия константы LOG_TAG является то, что вы можете настроить LogCat для фильтрации по этой строке и показывать вам только эти сообщения. Так их будет легче увидеть среди массы сообщений системного журнала.

1
ответ дан 30 November 2019 в 13:45
поделиться

Прочитайте Руководство по проектированию действий и задач на сайте разработчиков Android; там объясняется, как работают кнопки Home и Back. Очевидно, что если вы переопределите поведение по умолчанию (как упомянул hara выше), кнопка "Назад" не завершит действие.

Что касается вашего конкретного вопроса, проверьте ваш logcat. Там должно быть видно, возвращает ли он к жизни старый процесс или запускает новый. Если это неясно, вставьте пару записей журнала в onCreate, onPause, onDestroyed и т.д., чтобы вы могли увидеть, что именно происходит с вашим процессом.

5
ответ дан 30 November 2019 в 13:45
поделиться

Короткий ответ на первоначальный вопрос - "нет". В основном потому, что, к сожалению, не каждый разработчик следует рекомендациям, на которые ссылались предыдущие ответы.

Тем не менее, в самих руководствах упоминаются исключения, когда клавиша Back не должна вызывать finish(). Наиболее заметным исключением является веб-браузер, который имеет свой собственный "back stack" для каждого окна, поэтому он должен иметь свою собственную обработку клавиши Back.

0
ответ дан 30 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: