Закройте все запущенные действия в приложении Android?

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

Как я могу закрыть свою предыдущую деятельность и закрыть приложение?

Это одно решение, которое я пробовал, и он отлично работал для меня.

РЕШЕНИЕ-1

this.finish();//try activityname.finish instead of this Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Используйте это в действии, где вы хотите выйти из приложения.

================================================== =========================================================================================================================================================================================

РЕШЕНИЕ-2

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

 onActivityResult() 

Например, предположим, что существует 3 действия A, B, C, которые вы перемещаете из A-> B-> C, а в C вы хотите закрыть все действия, а затем использовать следующий образец.

Активность А

 public class A extends Activity { int Finish = 100; Button launch_second; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); launch_second = (Button) findViewById(R.id.start_second_act); launch_second.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent second = new Intent(A.this, B.class); startActivityForResult(second, Finish); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 100: this.finish(); break; default: break; } super.onActivityResult(requestCode, resultCode, data); } 

Активность B

 public class B extends Activity { private Button launch_next; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.second_main); launch_next = (Button) findViewById(R.id.start_third_activity); launch_next.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent third = new Intent(B.this,C.class); startActivityForResult(third, 100); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case 100: setResult(requestCode); this.finish(); break; default: break; } super.onActivityResult(requestCode, resultCode, data); } } 

Активность C

 public class C extends Activity { Button kill_app; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.third_main); kill_app = (Button)findViewById(R.id.kill_app_btn); kill_app.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { C.this.finish(); setResult(100); } }); } } 

РЕДАКТИРОВАТЬ

Сэм Джанц ответ чище, чем этот метод. Используйте флаги намерения в ваших интересах

Когда пользователь выйдет из системы:

 Intent intent = new Intent(this,MyHomeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putBooleanExtra("finishApplication", true); startActivity(intent); 

Затем в MyHomeActivity (ваша начальная активность) в onResume :

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

Таким образом, вам не нужно иметь чеки во всех действиях вашей деятельности только на дому.


Вариант Dirtier:

Создайте статическую логическую переменную в одном месте где-нибудь (вероятно, в классе, расширяющем приложение);

 public static boolean loggingOut = false; 

Когда пользователь нажимает на выход, установите для этого значение true и завершение вызова в этом действии.

 YourApplication.loggingOut = true; finish(); 

В каждом действии в onResume ()

 if(loggingOut){ finish(); } 

Убедитесь, что вы возвращаете значение boolean в false в своей основной / начальной активности:

 if(loggingOut){ finish(); YourApplication.loggingOut = false; } 

Если вы также хотите, чтобы кнопка «Назад» сделала это, переопределите onBackPressed () , что также сделает

 @Override public void onBackPressed(){ YourApplication.loggingOut = true; super.onBackPressed(); } 

Use finish () для каждого вида деятельности

1) Жизненный цикл деятельности

2) Завершение работы и управление жизненным циклом деятельности

3) Тот же вопрос ответил подробно (2 подхода – широковещательный приемник (+1) и Intent.FLAG_ACTIVITY_CLEAR_TOP)

Спасибо за ваши ответы. Я решил свою проблему.

Я пишу файл с некоторыми данными, и когда пользователь нажимает кнопку выхода из системы, я удаляю данные из этого файла и finish() текущую активность, а все в предыдущем onResume() я пишу код в onResume() Я читаю файл, а если он пуст или Null finish() так что он закроет все ваши действия, и ваше приложение закроется. Благодарим вас за большую помощь.

 Intent intent = new Intent(this, LoginActivity.class); ComponentName cn = intent.getComponent(); Intent mainIntent = IntentCompat.makeRestartActivityTask(cn); startActivity(mainIntent); 

Описание:

 public static Intent makeRestartActivityTask (ComponentName mainActivity) 

Сделайте намерение, которое можно использовать для повторного запуска задачи приложения в его базовом состоянии. Это похоже на makeMainActivity (ComponentName), но также устанавливает флаги FLAG_ACTIVITY_NEW_TASK и FLAG_ACTIVITY_CLEAR_TASK.

 @Override public void onClick(View v) { if (v == btnAtGlanceBack) { Intent backIntent = new Intent(this, Dashboard.class); startActivity(backIntent); } else if (v == btnAtGlanceLogOut) { Intent logoutIntent = new Intent(this, GlobalScholarLogin.class); logoutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(logoutIntent); } } 

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

Чтобы очистить весь стек, который отслеживает ваши действия в android, вы можете использовать следующий код

 Intent intent = new Intent(this, MyHomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); finish(); startActivity(intent); 

Поместите эту строку кода в ваше приложение System.exit (2);

Вы можете использовать это
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

От этого вопроса ответ Как выйти из приложения и показать главный экран?

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