¿Cómo matar una actividad de Android cuando la abandono para que no se pueda acceder desde el botón Atrás?


130

En una determinada actividad de Android, me gustaría comenzar una nueva actividad para el usuario en algún momento. Una vez que abandonan la primera actividad y llegan a la segunda, la primera actividad está obsoleta y quiero eliminarla por completo para que no se pueda acceder nuevamente desde el botón Atrás.

¿Cómo es la mejor manera de lograr esto? ¿Cómo elimino o destruyo esta actividad inmediatamente después de que el usuario la haya lanzado?


Mira esta respuesta , fue útil para mí.
Daniyar

Respuestas:


234

Solo necesitas llamar finish()

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

Gracias. Para ir un paso más allá, estoy comenzando la nueva actividad desde una ventana de diálogo: ¿funcionaría el código de la misma manera?
JohnRock

@CaseyB gracias por esto ... pero quiero saber, ¿puedo llamar a este método desde un Servicio? Si es así, ¿cómo?
swiftBoy

1
Los servicios no tienen una Actividad, lo que significa que no volverán a estar en la pila de actividades. Si desea eliminar alguna actividad de su servicio, debería poder llamar a myActivity.finish ();
CaseyB

3
Es una vieja respuesta de 7 años, y sin embargo sigue siendo válida para Android M y N.
zeeshan

1
@juztcode onDestroyes un método de ciclo de vida que solo debe llamarse desde el marco de Android.
CaseyB

106

Establecer android:noHistory="true"la actividad en su manifiesto eliminará una actividad de la pila cada vez que se aleje de ella. mira aquí



8

También puede agregar android:noHistory="true"a su Activityetiqueta en AndroidManifest.xml.

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

7

Sí, todo lo que necesita hacer es finalizar la llamada () en cualquier actividad que desee cerrar.


4

Escriba esto en cada "nueva actividad" después de inicializar su nueva intención->

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

2

¡Finalmente, tengo una solución!

Mi contexto es : - Quiero desconectar la conexión del socket cuando se destruye la actividad, intenté finalizar () la actividad pero no funcionó , mantiene la conexión en vivo en algún lugar.

entonces uso android.os.Process.killProcess(android.os.Process.myPid()); su kill my activity y lo usé android:excludeFromRecents="true" para eliminar de la actividad reciente.


1
Esta solución funcionó para mí, pero desafortunadamente muestra una página en blanco y para cerrar la conexión de socket puede usar socket.close (); .
Mehrdad

android.os.Process.killProcess(android.os.Process.myPid())mata el proceso de la aplicación y no solo la actividad. Esto significa que cualquier servicio en curso (en segundo plano o en primer plano) también se detendrá.
Wrichik Basu


0

Solo necesita usar el siguiente código cuando inicie la nueva actividad.

startActivity(new Intent(this, newactivity.class));
finish();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.