¿Presionando Atrás siempre causa Actividad para finalizar ()?

He oído que al presionar el botón de retroceso se hará que la actividad actual finish() . Este es siempre el caso? Parece que sería con la forma en que se despliega la actividad fuera de la pila.

La situación de la que no estoy tan seguro es cuando la actividad de la raíz en una tarea ha presionado de nuevo. Actualmente estoy experimentando un efecto muy extraño, descrito de la siguiente manera:

Al cargar mi aplicación, la primera actividad es para la inicialización, y una vez que termina, llama a mi actividad principal (una TabActivity). Esta primera actividad init tiene android: noHistory = "true" establecido en el Manifiesto, tan presionando Volver de mi Actividad principal no volverá a eso. Va al lanzador. Cuando hago clic en mi aplicación en el Lanzador una segunda vez, la actividad de inicialización se carga de nuevo y carga la actividad principal cuando se hace. Casi inmediatamente después, carga una segunda instancia de mi actividad principal. Pero SÓLO después de que la aplicación ya se haya ejecutado una vez, y se salió presionando BACK de la actividad principal. Lo hace cada vez subsecuente hasta que fuerza para salir de la aplicación o para cargar una nueva versión del IDE.

Basándome en esto, sospecho que algún tipo de instancia de Actividad está mintiendo y siendo reutilizado, ya que sólo ocurre en la segunda vez que ejecuto la aplicación (y salir con BACK – usando HOME simplemente regresa al último estado de la aplicación, no es gran cosa). Alguien tiene alguna idea?

7 Solutions collect form web for “¿Presionando Atrás siempre causa Actividad para finalizar ()?”

He oído que al presionar el botón de retroceso se hará que la actividad actual termine (). Este es siempre el caso?

No, no es. La mayoría de las actividades tienen este comportamiento pero no todas. Por ejemplo, puede crear un cuadro de diálogo y establecer setCancelable (false) y no se cerrará si hace clic en botón ATRÁS.

Además, puede personalizar el comportamiento de la actividad en el botón ATRÁS presionado mediante la sustitución de onBackPressed

Se llama cuando la actividad ha detectado la pulsación del usuario de la tecla de retroceso. La implementación predeterminada simplemente termina la actividad actual, pero puede anularla para hacer lo que quiera.

Acerca del comportamiento de su aplicación .. ¿Comprobó si el iniciador de actividades finalizó después de cargar su actividad principal? Quiero decir si se llama al método onDestroy (). Tal vez después de que se ejecuta la actividad principal que permanece allí y cuando haga clic en volver sólo tienes que volver a la antigua Launcher …

espero que esto ayude..

Lea las directrices de diseño de Actividades y Tareas en el sitio de desarrolladores de Android; explican cómo funcionan los botones Inicio y Atrás. Obviamente, si anula el comportamiento predeterminado (como se mencionó anteriormente en hara), el botón de retroceso no finalizará la actividad.

En su problema específico, revise su logcat. Usted debe ser capaz de ver allí si está trayendo un viejo proceso de nuevo a la vida o poner en marcha una nueva. Si no está claro, inserte un par de instrucciones de registro en onCreate, onPause, onDestroyed, etc., para que pueda ver exactamente lo que está sucediendo con su proceso.

Puede controlar BACK-BUTTON escribiendo el siguiente código.

 public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { //preventing default implementation previous to //android.os.Build.VERSION_CODES.ECLAIR return false; } return super.onKeyDown(keyCode, event); } 

¿Está ejecutando sus actividades con banderas especiales, como singleInstance o singleTop? Esos podrían estar causando las rarezas que estás viendo. La forma más sencilla de localizar lo que está causando el problema es llenarlo con mensajes de depuración. Por ejemplo:

  1. En su actividad de inicialización, agregue un registro en el principio de onCreate para obtener el nombre de la actividad como this.toString (). Más sobre por qué quieres esta línea más tarde.
  2. Cuando se inicia la actividad de pestañas principal, obtenga el nombre de la actividad de lanzamiento y un mensaje diciendo que ha lanzado la pestaña.
  3. Anule las devoluciones de llamada onPause (), onStop () y onDestroy () y añada líneas de depuración con this.toString () y también un mensaje que le diga cuál es la devolución de llamada.

Lo que esto hará es decirle si tiene varias instancias de la actividad de inicialización por ahí. A esto comparando el nombre de las actividades que llaman su actividad principal con las que acababan de crearse y las que pasaron a onDestroy.

Si no sabe cómo depurar, utilice Log.d(LOG_TAG, "Your message here"); . Y luego defina una cadena LOG_TAG constante en alguna parte. Después de eso, muestre la perspectiva LogCat en Eclispe al ir a la ventana, mostrar la perspectiva (o ver, no recuerdo exactamente), otro, Android, LogCat. El propósito de tener una constante LOG_TAG es que puede configurar LogCat para filtrar a esa cadena y sólo mostrarle esos mensajes. Esto hará que sea más fácil verlos entre la masa de los mensajes del registro del sistema.

La respuesta corta a la pregunta original es "no". Esto se debe en gran parte, por desgracia, no todos los desarrolladores sigue las directrices a las que se hace referencia en las respuestas anteriores.

Sin embargo, las propias guías mencionan excepciones, cuando la tecla Atrás no debe llamar a finish (). la excepción más destacada es el navegador Web, que tiene su propia "pila trasera" para cada ventana, por lo que debe tener su propio manejo personalizado de la tecla Atrás.

Si no hay fragmentos en la pila trasera y un desarrollador no se ha anulado enBackPressed, la actividad finalizará cuando se presione el botón Atrás.

Aquí está el código fuente para Android 4.4.2 Activity.onBackPressed ():

 public void onBackPressed() { if (!mFragments.popBackStackImmediate()) { finish(); } } 

acaba de anular onbackpressed () .. en la parte posterior de la prensa este método obtendrá ejecutar eliminar super y hacer lo que quieres hacer.

  • Ciclo de vida de la actividad de Android
  • ¿Cómo puedo conservar un objeto complejo a través de Reiniciar actividades?
  • Android Chronometer, retener el estado de tiempo (y seguir contando en segundo plano)
  • Uso de onResume () para actualizar la actividad
  • Ciclo de vida de actividad de Android y ciclo de código nativo de JNI
  • ¿Por qué "onPause" no se llama en la siguiente situación?
  • Dagger 2 Guardar y restaurar el estado cuando se detiene la actividad
  • OnOrientationChanged () se llama cuando OrientationEventListener está deshabilitado
  • ¿Es necesario guardar singletons?
  • Android: ejecuta el código onResume y onPause para todas las actividades de la aplicación?
  • GoogleMaps - llamando a OnPause ()
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.