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.