que intent application android back-stack activity-stack

android - intent - noHistory vs finish()-¿Cuál es el preferido?



application manifest android (3)

No quiero que mi aplicación muestre poca Activity (por ejemplo, SplashScreenActivity ) al presionar el botón back . Así que he usado noHistory=true en mi Manifest.xml para esa Activity como se muestra a continuación:

<activity android:name="com.gokul.SplashScreenActivity" android:noHistory="true" > </activity>

En lugar de configurar noHistory , también puedo llamar a finish() en mi método SplashActivity.onPause() o donde yo quiera, como se muestra a continuación:

@Override protected void onPause() { super.onPause(); finish(); }

Ambos hacen el trabajo perfectamente. Pero, ¿cuál es mejor usar, usar noHistory o call finish() ?


No use onPause () como se llama cuando la actividad pasa al fondo. Y este caso puede ser en cualquier momento, como en la intención o mensaje emergente (personalizado). Es mejor usar otra opción que jugar con el ciclo de vida de la actividad. Opción nohistoria si funciona para ti, entonces es bueno. Puedes intentar seguir también,

<activity android:name="com.gokul.SplashScreenActivity" android:launchMode="singleTask" android:clearTaskOnLaunch="true"/>


Si desea llamar a finish() , debe hacerlo después de una llamada startActivity , si lo hace en cualquiera de las devoluciones de llamada de ciclo de vida, como dice NasaGeek, podría llamarse en diferentes momentos, y no solo cuando navegue a otra actividad.

Lo bueno de noHistory es que el sistema se encarga de perfeccionar la actividad en el momento correcto (como puede leer here , el sistema llamará el método finish () para que pueda estar seguro de que no está llamando en un mal momento, y todo es seguro (probablemente esto no parece importante ahora, pero podría serlo, por ejemplo, cuando se trabaja con subprocesos)

Además, lo bueno de esto es que la actividad no solo finaliza cuando inicia otra actividad , sino también en cualquier otro caso cuando el usuario se aleja de ella y la actividad ya no está visible en la pantalla, por ejemplo, cuando el usuario pulsa el botón Atrás (como quisieras) o cuando otra actividad llega al primer plano .


onPause() no es en absoluto un buen lugar para realizar una llamada de finish() para su actividad. onPause() puede llamar a onPause() por una variedad de razones, y dudo que a los usuarios les complacería mucho ver que su aplicación simplemente olvidó lo que estaban haciendo si, por ejemplo, apagan y encienden la pantalla.

noHistory debe servirle bien, pero puede obtener un comportamiento similar llamando a finish() en su Activity inmediatamente después de lanzar una nueva Activity . Sin embargo, noHistory es más noHistory mantener al final, porque puede terminar olvidando incluir la llamada finish() si agrega otra llamada startActivity() a su SplashActivity más adelante.