Поведение нажатия клавиши "Домой"
При разработке примера приложения для Android я построил два упражнения 1) Упражнение 1 2) Упражнение 2
Теперь упражнение 2 является передним планом, а занятие 1 - фоновым. Теперь пользователь нажимает клавишу Home. Приложение (т.е. оба вида деятельности) исчезают. Теперь, когда мы перезапускаем приложение, мы видим Упражнение 1 в качестве переднего плана. Мой вопрос:
1) Поддерживает ли платформа какие-либо записи в истории при нажатии клавиши home? 2) Как отвести пользователя к последнему действию запуска при перезапуске приложения?
8 ответов
Я боролся с этим странным поведением более месяца, но я наконец-то нашел объяснение методом проб и ошибок.
Это происходит, когда вы запускаете приложение из Eclipse, из командной строки или если вы устанавливаете приложение и нажимаете кнопку "Открыть" (вместо кнопки "Готово"), чтобы запустить приложение сразу после его установки.
Если в одном из этих случаев вы запустите приложение, перейдите к действию 1, а затем к действию 2, нажмите кнопку HOME, а затем нажмите значок приложения, и откроется новый экземпляр действия 1. Не верь мне на слово. Просто нажмите НАЗАД и увидите, что он возвращает вас к вашей Activity 2, которую вы оставили, когда нажали HOME.
Кажется, что активность запуска не помещается в стек активности, если приложение запускается одним из упомянутых выше способов, поэтому он создает новый экземпляр действия запуска поверх текущих действий в стеке приложения. Это выглядит для меня как ошибка.
Таким образом, обходной путь может состоять в том, чтобы выйти из приложения, при первом его запуске из Eclipse или из командной строки, или кнопки "Открыть" и т. Д., Нажав кнопку НАЗАД столько раз, сколько необходимо, а затем снова войдите в приложение. С этого момента поведение будет таким, как ожидалось.
РЕДАКТИРОВАТЬ: лучший обходной путь будет следующим: создайте DummyActivity и установите его в качестве основной точки входа в приложение. Также добавьте флаг android:noHistory="true"
, DummyActivity
прост и будет выглядеть так:
открытый класс DummyActivity расширяет Activity {
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (!MyApplication.startedApp) { Intent intent = new Intent(this, HomeActivity.class); startActivity(intent); } finish(); } }
MyApplication
это класс, который расширяет android.app.Application и определяется внутри AndroidManifest.xml. В HomeActivity.class
ты сидишь внутри onCreate()
метод логического поля startedApp
к истине. Если пользователь нажимает кнопку BACK с экрана, вам нужно переместить значение для startApp в значение false.
Открытый класс HomeActivity расширяет Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApplication.startedApp = true;
}
@Override
public void onBackPressed() {
MacawApplication.startedApp = false;
super.onBackPressed();
}
}
Итак, при первом запуске приложение входит в блок if и запускает первую реальную активность в нашем приложении. Если вы перемещаетесь по приложению, нажмите ДОМОЙ, а затем снова запустите приложение, DummyActivity
будет вызван во второй раз, и он просто позвонит finish()
на себя и приложение покажет последнее действие, прежде чем вы нажали HOME.
Поддерживает ли платформа какую-либо запись в истории, когда нажата домашняя клавиша?
Да. Действия, когда они запущены / закончены, помещаются в стек истории.
Как нам отвести пользователя к последнему действию запуска при перезапуске приложения?
AFAICT, это должно быть поведение по умолчанию. Когда вы перезапускаете свое приложение, вы переходите к последнему действию в стеке, если только вы не изменили стек.
Прочитайте это для деталей: Основы применения - Действия и задачи
Это ошибка в ОС Android.
Пожалуйста, выполните следующие шаги.
1) Удалите приложение и переустановите его.
2) После установки приложения на нем появятся две опции: "Готово" и "Открыть", нажмите кнопку "Готово".
3) Теперь откройте приложение из меню приложения. Ваша проблема будет решена.
При каждом нажатии кнопки HOME приложение запускается из состояния, в котором оно было оставлено.
Режим запуска вашей активности может повлиять на поведение, когда оно возобновляется после нажатия кнопки домой. Если первое действие было запущено как синглетная задача или одиночная копия, то это всегда первое действие, которое будет возобновлено.
Если действия запускаются с использованием режима запуска по умолчанию, то после перезапуска приложения предыдущее действие будет возобновлено.
При нажатии кнопки "Домой" приложение исчезнет, при повторном запуске приложения возобновится активность на переднем плане,
причина в его поведении операционной системы Android
Вы не можете обрабатывать кнопку "Домой"... Страница разработки Android говорит, что кнопка "Домой" обрабатывается новее… это легко понять.. Спасибо
У меня была похожая проблема. Это был не запуск последней открытой активности, а Активность запуска. Но я также положил
android:launchMode="singleTask"
в моей Launcher Активность в манифесте. Удаление, которое исправило мою проблему. Если вы также поставили то же самое, попробуйте удалить его, это может исправить и для вас.
Я также могу порекомендовать прочитать Руководство по разработке заданий и заданий. Это руководство по пользовательскому интерфейсу о том, как вести себя при нажатии кнопки "Домой", при нажатии кнопки "Назад" и т. Д.
Он не очень технический, но он хорошо иллюстрирует, как должно вести себя ваше приложение и чего ожидает ОС.