Android: несколько действий и вопрос OnDestroy
У меня есть несколько дюжин заданий: 1-Main, 1-Animation, 10-Other, и это подмножество других видов деятельности (пара десятков).
Из основного вы можете перейти к любому другому с помощью кнопок.
Другие вызывают подмножество действий, и они называют Анимацию.
Каждое из действий, включая подмножества и анимацию, имеет кнопку для возврата к основному действию.
Все кнопки позволяют пользователю корректировать активность.
Проблема: из основного занятия я хочу выйти с помощью клавиши Back устройства. Но что происходит, так это то, что он шагает назад через все предыдущие действия.
Кнопки "вернуться к основному" (в каждом действии) имеют готовый и onDestroy. Итак, я не уверен, почему эти экраны / действия не уничтожены...?
Любые комментарии / предложения / разъяснения приветствуются - спасибо
[добавление фрагмента кода]
Примечание: я переместил / добавил / удалил финиш, onDestroy, onStop... перепробовал много способов, поэтому то, что показано в фрагменте, это только один способ, которым я пытался...
// ---------------------------------------------------------
mainMenu.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// do something
Intent Maincode = new Intent();
Maincode.setClassName(
"com.bt.test",
"com.bt.test.Maincode");
// startActivity(Maincode); // go to maincode
finish();
onStop();
onDestroy();
startActivity(Maincode); // go to maincode
}
}); // end -----------------------------------------------
3 ответа
Не могли бы вы опубликовать свой обработчик onClick для возврата к главной кнопке?
Вы должны делать что-то вроде этого:
Intent i = new Intent(this, MainActivity.class);
startActivity(i);
finish();
Изменить: Вы также можете попробовать установить этот флаг:
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Это должно очистить стек активности между вызывающим и принимающим действиями, если принимающее действие уже где-то находится в стеке.
Во-первых, вы вообще никогда не должны звонить onStop
или же onDestroy
(или, в этом отношении, любой из других методов жизненного цикла Activity) самостоятельно. Android сделает это за вас в результате finish
и, вероятно, запутается, если вы сделаете это сами.
Во-вторых, ваш слушатель "return to main" не должен вызывать startActivity
совсем. Вместо этого, если вы хотите очистить стек активности, вам нужно просто вызвать finish
там. Если вы можете быть в нескольких действиях от основного и хотите вернуться напрямую, вы должны использовать startActivityForResult
при запуске вложенных действий и установите результат Intent с истинным флагом, прикрепленным к "главной кнопке". Тогда любая промежуточная активность получит onActivityResult
называется, и если они видят флаг, они могут немедленно finish
слишком, чтобы контроль вернулся к вашей основной деятельности.
РЕДАКТИРОВАТЬ: на самом деле, startActivity
с FLAG_ACTIVITY_CLEAR_TOP
это гораздо более простой способ получить тот же эффект. Придерживайтесь этого.
Finish не просто "завершает" ваше приложение / действие, как указано в Documents
"Вызывайте это, когда ваша деятельность завершена и должна быть закрыта. ActivityResult передается обратно тому, кто запустил вас через onActivityResult()".
Другими словами, ваш призыв закончить будет распространяться через все действия, в которых вы были ранее.