Завершите все действия за раз

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

Есть ли способ закрыть все действия сразу?

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

Intent intent = new Intent(getApplicationContext(), FirstActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); 

Вышеупомянутый код завершает все действия, кроме FirstActivity. Затем нам нужно закончить функцию FirstActivity. Введите код ниже в oncreate от Firstactivity.

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

и вы закончили ….

В finishAffinity() метод finishAffinity() , который завершит текущую активность и все родительские действия, но работает только в Android 4.1 или выше.

Для API 16+ используйте

 finishAffinity(); 

Для более низких (Android 4.1 ниже) используйте

 ActivityCompat.finishAffinity(YourActivity.this); 

Лучшее решение, которое я нашел, которое совместимо с устройствами, имеющими уровень API <11

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

Для этого решения требуется поддержка Android-библиотеки

Для API 16+ используйте

 finishAffinity(); 

Для более низкого использования используйте

 ActivityCompat.finishAffinity(YourActivity.this) 

Существует три решения для чистой истории событий.

1) Вы можете написать finish() во время запуска новой активности с помощью намерения.

2) Напиши android:noHistory="true" во всем в файле Androidmanifest.xml, используя это, если вы открываете новую активность и вы не пишете finish (), в то время предыдущая активность всегда заканчивалась после записи ваша деятельность выглядит так.

   

3) напишите system.exit(0) для выхода из приложения.

Я боролся с той же проблемой. Открытие страницы about и call finish(); оттуда не закрывал приложение, а собирался на предыдущую активность, и я хотел закрыть приложение с самой страницы.

Это код, который работал для меня:

 Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(startMain); finish(); 

Надеюсь это поможет.

Если вы ищете решение, которое, по-видимому, больше «по книге» и методологически разработанное (с использованием BroadcastReceiver), вам лучше взглянуть на следующую ссылку: http://www.hrupin.com/2011/10 / how-to-finish-all-activities-in-your-android-application-through-simple-call .

В предлагаемой реализации, которая появляется в этой ссылке, требуется небольшое изменение – вы должны использовать метод sendStickyBroadcast (Intent) (не забудьте добавить разрешение BROADCAST_STICKY к вашему манифесту), а не sendBroadcast (Intent), чтобы включить приостановил действия, чтобы иметь возможность принимать широковещание и обрабатывать его, а это значит, что вы также должны удалить эту липкую трансляцию во время перезапуска приложения, вызвав метод removeStickyBroadcast (Intent) в методе onCreate (), который вы открываете.

Хотя вышеупомянутые решения startActivity (…), на первый взгляд, кажутся очень приятными, элегантными, короткими, быстрыми и легкими в реализации – они чувствуют себя немного «неправильно» (чтобы начать свою деятельность – со всеми возможными накладные расходы и ресурсы, которые могут потребоваться и задействованы в нем, только для того, чтобы убить его? …)

После меня работали два флага. Они очистят все предыдущие действия и начнут новый

  Intent intent = new Intent(getApplicationContext(), MyDetails.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); 

Надеюсь это поможет.

Вы можете попробовать просто закончитьAffinity (), закрыть все текущие действия, чтобы работать над версией v4.1

Вы можете сохранить логический флаг для представления, должны ли все действия быть закончены или нет (более предпочтительны в ваших общих предпочтениях), тогда onStart() для каждого вида деятельности должен иметь что-то вроде:

 SharedPreferences pref=PreferenceManager.getDefaultSharedPreferences(this); boolean needToDestroyFlag=pref.getBoolean("destroyFlag", false); if(needToDestroyFlag) { finish(); }else { //... } 

Очевидно, вы можете установить этот флаг, как показано ниже, когда вам нужно закончить все действия (в текущем действии), после чего вы можете вызвать метод finish () для текущей активности, что приведет к прекращению текущей активности и поп-активности из стека один, метод onStart () каждого из них выполняет и вызывает его прекращение:

 SharedPreferences.Editor editor=PreferenceManager.getDefaultSharedPreferences(this).edit(); editor.putBoolean("destroyFlag", true); editor.apply(); 

Если вы используете метод, предложенный @letsnurture, вам будет задан вопрос, заданный @gumuruh.

Проблема с finishAffinity() заключается в том, что только действия в вашей текущей задаче закрыты, но действия с singleInstance launchMode и в других задачах все еще открываются и finishAffinity() на передний план после finishAffinity() . Проблема с System.exit(0) заключается в том, что вы завершаете процесс App со всеми фоновыми службами и всей выделенной памятью, и это может привести к нежелательным побочным эффектам (например, больше не получать уведомления).

Вот еще две альтернативы, которые решают обе проблемы :

  1. Используйте ActivityLifecycleCallbacks в вашем classе приложения, чтобы зарегистрировать созданные действия и закрыть их при необходимости: https://gist.github.com/sebaslogen/5006ec133243379d293f9d6221100ddb#file-myandroidapplication-kt-L10
  2. При тестировании вы можете использовать ActivityLifecycleMonitorRegistry : https://github.com/sebaslogen/CleanGUITestArchitecture/blob/master/app/src/androidTest/java/com/neoranga55/cleanguitestarchitecture/util/ActivityFinisher.java#L15

использование

 finishAffinity (); 

Вместо:

 System.exit(); or finish(); 

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

Если корень:

 Runtime.getRuntime().exec("su -c service call activity 42 s16 com.example.your_app"); 

Вы можете использовать finishAffinity() , который завершит текущую активность и все действия родителя. Но он работает только для API 16+ .

Использование API 16+:

 finishAffinity(); 

Ниже API 16:

 ActivityCompat.finishAffinity(this); //with v4 support library 

Чтобы выйти из всего приложения:

 finishAffinity(); // Close all activites System.exit(0); // closing files, releasing resources 

Ни один из вышеупомянутых ответов не работал для меня. Но я исследовал еще и, наконец, получил ответ.

Вы действительно попросили закрыть приложение, как мне было нужно. поэтому добавьте следующий код

 finishAffinity(); 

закрыть приложение

 Intent intent = new Intent(getApplicationContext(), Splash_Screen.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent); 

поместите это в oncreate и onResume самого первого действия, которое открывается. ех. работает на экране заставки

 if (getIntent().getBooleanExtra("EXIT", false)) { this.finish(); System.exit(0); } 

Я стартер в java / android, может быть, это простое решение поможет вам

FIRST , создать статический class

 public class ActivityManager { static Activity _step1; static Activity _step2; static Activity _step3; public static void setActivity1(Activity activity) { _step1 = activity; } public static void setActivity2(Activity activity) { _step2 = activity; } public static void setActivity3(Activity activity) { _step3 = activity; } public static void finishAll() { _step1.finish(); _step2.finish(); _step3.finish(); } } 

ТОГДА, когда вы запускаете новую ссылку сохранения активности своему менеджеру (в шаге 1):

 ActivityManager.setActivity1(this); AddValuesToSharedPreferences(); Intent intent = new Intent(Step1.this, Step2.class); startActivity(intent); 

И ТОГДА на последнем шаге закончите все:

  public void OkExit(View v) throws IOException { ActivityManager.finishAll(); } 
Interesting Posts
Давайте будем гением компьютера.