Як вбити Android-операцію, залишаючи її, щоб не можна було отримати доступ до кнопки "назад"?


131

У даній діяльності на Android я хотів би в якийсь момент почати нову діяльність для користувача. Після того, як вони залишають першу активність і приходять до другої, перша активність застаріла, і я хочу її повністю видалити, щоб знов не можна було отримати доступ до кнопки "назад".

Як найкращий спосіб досягти цього? Як я вбиваю або знищую цю діяльність відразу після того, як користувач запустив нову діяльність?


Перевірте цю відповідь , мені це було корисно.
Даніяр

Відповіді:


235

Вам просто потрібно зателефонувати finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();

Дякую. Щоб зробити цей крок далі, я починаю нову діяльність з вікна діалогу - чи працював би код так само?
JohnRock

@CaseyB спасибі за це ... але я хочу знати, чи можу я зателефонувати цьому методу зі служби, якщо так, то як?
swiftBoy

1
Служби не мають активності, що означає, що вони не будуть знаходитись у степі активності, на яку слід повернутися. Якщо ви хочете вбити деяку діяльність зі свого сервісу, ви повинні мати можливість зателефонувати на myActivity.finish ();
CaseyB

3
Це відповідь 7 років, і все ще діє для Android M та N.
Зеешан

1
@juztcode onDestroy- це метод життєвого циклу, який повинен називатися лише з Android-системи.
КейсіБ

106

Якщо налаштувати android:noHistory="true"активність у вашому маніфесті, вилучатиме активність зі стека кожного разу, коли вона не переходитиме від неї. дивіться тут



8

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

<activity
            ...
            android:noHistory="true">
</activity>

7

Так, все, що вам потрібно зробити, це закінчити виклик () у будь-якій діяльності, яку ви хочете закрити.


4

Пишіть це у кожній «новій діяльності» після ініціалізації нового наміру->

Intent i = new Intent(this, yourClass.class);
startActivity(i);
finish();

2

Нарешті я отримав рішення!

Мій контекст : - Я хочу відключити з'єднання сокета, коли активність знищена, я намагався закінчити () діяльність, але це не спрацювало у мене , її зв'язок підтримувати десь живе.

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


1
Це рішення працювало для мене, але, на жаль, показує порожню сторінку, а для закриття з'єднання socket ви можете використовувати socket.close (); .
Мехрдад

android.os.Process.killProcess(android.os.Process.myPid())вбиває процес додаток, а не лише активність. Це означає, що будь-яка поточна послуга (фон або передній план) буде також зупинена.
Wrichik Basu


0

Вам просто потрібно використовувати код нижче під час запуску нової діяльності.

startActivity(new Intent(this, newactivity.class));
finish();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.