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

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

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

Solutions Collecting From Web of "Завершите все действия за раз"

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

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 <11

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

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

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

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

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

 <activity android:name=".Splash_Screen_Activity" android:label="@string/app_name" android:noHistory="true"> </activity> 

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(); 

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

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

 finishAffinity(); 

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

 ActivityCompat.finishAffinity(YourActivity.this) 

Если вы ищете решение, которое, по-видимому, более «по книге» и методологически разработанное (с использованием 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 (…), на первый взгляд, кажутся очень приятными, элегантными, короткими, быстрыми и легкими в реализации – они чувствуют себя немного «неправильно» (чтобы начать деятельность – со всеми возможными Накладные расходы и ресурсы, которые могут потребоваться и задействованы в нем, только для того, чтобы убить его? …)

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

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

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

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

Вы можете сохранить логический флаг для представления, должны ли все действия быть закончены или нет (более предпочтительны в ваших общих предпочтениях), тогда 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.

Если укоренены:

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

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

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

 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(); }