Выйти/завершить приложение/активность - android

У меня есть 4 действия: Act1, Act2, Act3 и Act4. Кнопка в Act1 открывает Act2, кнопка в Act2 открывает Act3, кнопка в Act3 открывает Act4.

Я хочу сделать две вещи:

  1. У меня есть кнопка в Act4, которая направляет пользователя в Act1, проблема в том, что когда пользователь нажимает назад в Act1, я хочу закрыть приложение, а не открывать Act4.

  2. У меня есть опция в меню «выход» во всех действиях, когда пользователь выбирает ее, я хочу закрыть приложение, а не возвращаться к предыдущему действию.

Пробовал использовать finish();, но это не соответствовало моим требованиям.


person kumareloaded    schedule 18.06.2012    source источник
comment
Попробуйте этот ответ   -  person Praveenkumar    schedule 18.06.2012
comment
вы можете найти ответ здесь............. [проверьте это.........] [1] [1]: stackoverflow.com/questions/11077020/   -  person Anu    schedule 18.06.2012
comment
Сегодня был задан почти точный дубликат здесь. Я бы рекомендовал прочитать этот пост, чтобы понять, почему вам не следует реализовывать то, что вы пытаетесь.   -  person gideon    schedule 18.06.2012
comment
вот что вам нужно............ [здесь][1] [1]: stackoverflow.com/questions/11077020/   -  person Anu    schedule 18.06.2012
comment
спасибо, ребята, попробую все это и вернусь :)   -  person kumareloaded    schedule 18.06.2012
comment
У тебя есть все, что тебе нужно?   -  person Praveenkumar    schedule 18.06.2012


Ответы (11)


Используйте приведенный ниже код в кнопке выхода вашего Act4 Menu.xml -

Intent intent = new Intent(Act4.this, Act1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

И в методе onCreate() вашего первого действия просто введите приведенный ниже код -

if (getIntent().getBooleanExtra("EXIT", false)) 
{
    finish();
}

Это закроет ваше приложение.

person Praveenkumar    schedule 18.06.2012
comment
Даже если вы вызовете finish(), ваш метод super.onCreate() будет вызван в любом случае. И тогда Android может сбросить весь ваш стек активности, если вы не будете осторожны. - person IgorGanapolsky; 26.10.2012
comment
@ИгорьГ. Тогда, как лучше всего это закончить? - person Praveenkumar; 26.10.2012
comment
Ваш способ хорош. Но я говорю быть осторожным, что если super.onDestroy() или super.onCreate() находятся в ожидании, то они все равно будут вызываться после того, как вы вызовете finish(). И вот тогда у вас может быть нежелательное поведение, если вы создали подкласс onCreate() или onResume() другой активности. - person IgorGanapolsky; 26.10.2012
comment
Я использую связанную службу в своем проекте, и это не закрывает мое приложение от дочерней активности. - person shehzy; 25.06.2015
comment
Мой класс Act1.class — это MainActivity. Если я использую System.exit вместо finish(); тогда он работает. - person Vempati Satya Suryanarayana; 10.03.2019

Проверьте эту ссылку:

Нажмите здесь

Ты можешь использовать :

@Override
public void onBackPressed()
{
     moveTaskToBack(true);
}

во всех действиях, чтобы закрыть приложение.

person Krishna Suthar    schedule 18.06.2012
comment
Привет, ты пробовал это раньше? Потому что он не выйдет из приложения. Просто запустите приложение в фоновом режиме - person Praveenkumar; 18.06.2012
comment
В порядке. Я дал одну ссылку. Проверьте все ответы на это. - person Krishna Suthar; 18.06.2012
comment
Это не выход из приложения. Это отодвигает задачу на задний план. Если затем пользователь использует длительное нажатие на клавишу HOME и выбирает это приложение, оно вернется на передний план с действиями, которые все еще находятся в задаче, как и раньше. - person David Wasser; 18.06.2012
comment
Лучший ответ для моего случая с мультиактивностью, это единственный ответ, который работает со мной. - person FarOoOosa; 01.06.2016

Intent intent = new Intent(Act4.this, Act1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Снимите флажок, прежде чем вернуться к предыдущему действию. Это может помочь вам.

person Prerak    schedule 27.12.2016

Поместите этот код в свое приложение:

moveTaskToBack(true);
android.os.Process.killProcess(Process.myPid());
System.exit(1);
person Manikumar Gouni    schedule 13.10.2017

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

Intent in1=new Intent(Act4.this, Act1.class);
startActivity(in1);
finish();

И напишите ниже код в событии Click кнопки выхода во всех действиях.

finish();
person Dipak Keshariya    schedule 18.06.2012

Используйте android:noHistory = "true" в файле AndroidManifest.xml.

    <activity
        android:name=".Act1"
        android:noHistory="true" />
    <activity
        android:name=".Act2"
        android:noHistory="true" />
    <activity
        android:name=".Act3"
        android:noHistory="true" />
    <activity
        android:name=".Act4"
        android:noHistory="true" />
person Jithin Jude    schedule 27.07.2017

Если у вас есть другая активность позади (в стеке активности приложения), вы можете использовать finish() для выхода из текущей активности.

Однако функция возврата также предполагает удаление текущей активности из стека активности вашего приложения.

По моему опыту, очень ненадежно полагаться на действия в заднем стеке (в стеке действий приложения). Из-за этого я выходил из каждого занятия, когда углублялся.

В твоем случае:

Act 1 -> exit -> Act 2 -> exit -> Act 3 -> exit -> Act 4 -> exit -> Act 1 -> exit 

Вышеупомянутый метод завершит все действия.

Однако, если вы хотите запустить какой-либо код в фоновом режиме, лучше полагаться на «Сервис», а не на «Действие». Вы можете позволить «Службе» выйти после выполнения назначенной работы.

person kalan nawarathne    schedule 05.06.2014

Подход, который я использую, заключается в том, чтобы начинать все дочерние действия с startActivityForResult. Затем я могу поставитьExtra("STATE", some_value) при выходе из любого дочернего элемента и использовать значение состояния, чтобы определить, что делать через родителей.

Если я хочу выйти из приложения из глубокого дочернего элемента, «СОСТОЯНИЕ» будет «выходом», и каждый дочерний элемент в иерархии просто получит StringExtra для «выхода», сделает putExtra («СОСТОЯНИЕ», «выход») и вызовет Finish(), а затем приложение в конце вызовет Finish(). Вы можете использовать это для достижения любого желаемого состояния.

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

person R Earle Harris    schedule 24.12.2013

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

public static Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    activity=this;
}
public static void CloseApp(){
    activity.finish();
} 
person Hakim Douib    schedule 17.05.2017

Лоток этот

Intent intent =new Intent(MainActivity.this, ClassName.class);
  finish
startActivity(intent);
person Muhammad Rehan    schedule 13.08.2016

Запустите Activity1, используя намерение, и попробуйте вызвать finishAffinity() в onBackPressed() из Activity1.

person Vandana Surendranath    schedule 14.08.2016