¿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?

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

Respuestas:

234

Solo necesitas llamar finish()

Intent intent = new Intent(this, NextActivity.class);
startActivity(intent);
finish();
CaseyB
fuente
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í

jqpubliq
fuente
11

puedes usar:

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Jmorvan
fuente
¡interesante! ¿Qué significa "FLAG_ACTIVITY_NO_HISTORY" exactamente?
Armando Marques Sobrinho
8

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

<activity
            ...
            android:noHistory="true">
</activity>
Danke Xie
fuente
7

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

RobGThai
fuente
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();
JBL AK-47
fuente
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.

iamkdblue
fuente
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
1

Agregue este atributo a su actividad en el archivo de manifiesto. android: noHistory = "true"

Balasubramaniam Mayuran
fuente
0

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

startActivity(new Intent(this, newactivity.class));
finish();
Soni Kumar
fuente