Как убить активность Android при выходе из нее, чтобы к ней нельзя было получить доступ с помощью кнопки возврата?

131

В данном Android-действии я хотел бы в какой-то момент начать новое действие для пользователя. Как только они покинут первое действие и перейдут ко второму, первое действие устареет, и я хочу полностью удалить его, чтобы к нему нельзя было снова получить доступ с помощью кнопки возврата.

Как лучше всего этого добиться? Как мне убить или уничтожить это действие сразу после того, как пользователь запустил новое действие?

JohnRock
источник
Проверьте этот ответ , он мне пригодился.
Данияр

Ответы:

235

Вам просто нужно позвонить finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
CaseyB
источник
Спасибо. Чтобы сделать еще один шаг вперед, я запускаю новое действие из диалогового окна - будет ли код работать таким же образом?
JohnRock
@CaseyB, спасибо за это .. но я хочу знать, могу ли я вызвать этот метод из службы, если да, то как?
swiftBoy 06
1
У сервисов нет Activity, что означает, что они не будут в стеке действий, к которому можно будет вернуться. Если вы хотите убрать какую-то активность из вашей службы, вы можете вызвать myActivity.finish ();
CaseyB 06
3
Этому
1
@juztcode onDestroy- это метод жизненного цикла, который предназначен для вызова только из платформы Android.
CaseyB
106

Настройка android:noHistory="true"действия в вашем манифесте приведет к удалению действия из стека при переходе от него. смотрите здесь

jqpubliq
источник
11

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

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Jmorvan
источник
интересный! что именно означает "FLAG_ACTIVITY_NO_HISTORY"?
Armando Marques Sobrinho
8

Вы также можете добавить android:noHistory="true"в свой Activityтег в AndroidManifest.xml.

<activity
            ...
            android:noHistory="true">
</activity>
Данке Се
источник
7

Да, все, что вам нужно сделать, это вызвать finish () в любом действии, которое вы хотите закрыть.

RobGThai
источник
4

Запишите это в каждом "новом действии" после того, как вы инициализировали свое новое намерение->

Intent i = new Intent(this, yourClass.class);
startActivity(i);
finish();
JBL AK-47
источник
2

Наконец-то я получил решение!

Мой контекст : - Я хочу отключить соединение сокета, когда действие разрушено, я попытался завершить () действие, но у меня это не сработало , его соединение где-то осталось.

поэтому я использую android.os.Process.killProcess(android.os.Process.myPid()); его для уничтожения своей активности, и я использовал android:excludeFromRecents="true" для удаления из недавней активности.

iamkdblue
источник
1
Это решение сработало для меня, но, к сожалению, показывает пустую страницу, и чтобы закрыть соединение с сокетом, вы можете использовать socket.close (); ,
Mehrdad
android.os.Process.killProcess(android.os.Process.myPid())убивает процесс приложения, а не только активность. Это означает, что любая текущая служба (фоновая или передняя) также будет остановлена.
Вричик Басу,
1

Добавьте этот атрибут к своей активности в файле манифеста. андроид: noHistory = "истина"

Маюран Баласубраманиам
источник
0

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

startActivity(new Intent(this, newactivity.class));
finish();
Сони Кумар
источник