2010-03-01 17 views

Respuesta

36

Inmediatamente después de comenzar una nueva actividad, usando startActivity, asegúrese de llamar al finish() para que la actividad actual no se apile detrás de la nueva.

EDITAR En cuanto a su comentario:

Lo que sugieres no es particularmente cómo el flujo de aplicaciones para Android por lo general funciona, y cómo los usuarios de esperar que funcione. Lo que puede hacer si realmente lo desea, es asegurarse de que cada startActivity antes de esa actividad, es startActivityForResult y tiene un oyente onActivityResult que comprueba si hay un código de salida y las burbujas vuelven. Puede read more about that here. Básicamente, utilice setResult antes de terminar una actividad, para establecer un código de salida de su elección, y si su actividad principal recibe el código de salida, se establece que en que actividad, y que uno termine, etc ...

+1

Creo que no entendía el caso, mi pregunta es cuando el usuario haga clic en una actividad específica que elegir? Pulsando el botón sobre él debe hacer la salida llamada de aplicación –

+0

bien hacia atrás, ver a mi edición. –

2

¿Por qué el usuario no debería presionar el botón de inicio? Luego pueden salir de su aplicación de cualquiera de sus actividades, no solo de una específica.

Si le preocupa que su aplicación continúe haciendo algo de fondo. Asegúrese de detenerlo en los comandos onPause y onStop relevantes (que se activarán cuando el usuario presione Inicio).

Si su problema es que desea la próxima vez que el usuario haga clic en su aplicación para que comience desde el principio, le recomiendo que coloque algún tipo de elemento de menú o botón de IU en la pantalla que lleve al usuario a la actividad de inicio de tu aplicación. Al igual que el pájaro del gorjeo en la aplicación oficial de Twitter, etc.

78

en mi casa Actividad puedo reemplazar el "onBackPressed" a:

@Override 
public void onBackPressed() { 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 

por lo que si el usuario está en la actividad principal y oprima la espalda, va a la pantalla de inicio.

Tomé el código de Going to home screen Programmatically

+0

Excelente, justo lo que necesitaba. –

+0

¿Puede alguien describir más a fondo cómo funciona esto? Si el usuario sigue presionando el botón Atrás y luego relanzando la aplicación, ¿la pila de actividades no crecerá indefinidamente? – pete

+0

Excelente, funcionó "como se anuncia" :) – s0nica

23

una mejor experiencia de usuario:

/** 
* Back button listener. 
* Will close the application if the back button pressed twice. 
*/ 
@Override 
public void onBackPressed() 
{ 
    if(backButtonCount >= 1) 
    { 
     Intent intent = new Intent(Intent.ACTION_MAIN); 
     intent.addCategory(Intent.CATEGORY_HOME); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 
    } 
    else 
    { 
     Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show(); 
     backButtonCount++; 
    } 
} 
+1

Buen trabajo. Algunas otras cosas que agregaría es establecer una variable miembro a la llamada Toast.makeText (por ejemplo, Toast myToast = Toast.makeText()), luego usar eso en backButtonCount> = 1, llamando a .cancel() en esa tostada. Alargué la duración a Toast.LENGTH_LONG para mis propósitos, ya que para la cantidad de texto la duración parecía corta. Mis usuarios son personas mayores. Además, como probablemente sea obvio, backButtonCount es una variable miembro establecida en 0 y también debe establecerse en 0 dentro de su primera instrucción if. –

+0

También agregué "android.os.Process.killProcess (android.os.Process.myPid());" entonces mi aplicación se mata y se reinicia si el usuario vuelve a hacer clic –

0

termine su current_activity utilizando el método finish() onBack method of your current_activity

y luego añadir debajo de las líneas de OnDestroy del current_activity para la Eliminación de la Fuerza de cerca

@Override 
public void onDestroy() 
{ 
    android.os.Process.killProcess(android.os.Process.myPid()); 
    super.onDestroy(); 
} 
1

La aplicación solo saldrá si no hay actividades en la pila posterior. Así que añadir esta línea en su manifiesto androide: noHistory = "true" a todas las actividades que usted no quiere estar de vuelta stacked.And entonces para cerrar la aplicación llame a la acabado() en el OnBackPressed

<activity android:name=".activities.DemoActivity" 
      android:screenOrientation="portrait" 
      **android:noHistory="true"** 
      /> 
1

Antes que nada, Android no recomienda que hagas eso en el botón Atrás, sino que usas los métodos del ciclo de vida proporcionados. El botón Atrás no debe destruir la Actividad.

Las actividades se agregan a la pila, accesible desde la vista general (botón cuadrado desde que introdujeron el diseño de Material en 5.0) cuando se presiona el botón Atrás en la última Actividad restante de la pila de IU. Si el usuario desea cerrar su aplicación, debe deslizarla hacia afuera (cerrarla) desde el menú de Información general.

Su aplicación es responsable de detener las tareas en segundo plano y los trabajos que no desea ejecutar, en los métodos de ciclo de vida onPause(), onStop() y onDestroy(). Por favor, lea más acerca de los ciclos de vida y su correcta aplicación aquí: http://developer.android.com/training/basics/activity-lifecycle/stopping.html

Pero para responder a su pregunta, puede hacerlo hacks para implementar el comportamiento exacto que desea, pero como he dicho, no se recomienda:

@Override 
public void onBackPressed() { 

// make sure you have this outcommented 
// super.onBackPressed(); 
Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 
} 
1

Para salir de una aplicación de Android, simplemente use. en su actividad principal, o puede archivo de manifiesto de Android utilizar para establecer

android:noHistory="true" 
2

Uso onBackPressed método

@Override 
public void onBackPressed() { 
    finish(); 
    super.onBackPressed(); 
} 

Esto va a resolver su problema.

0

Modifiqué @Vlad_Spays para que el botón de retroceso funcione normalmente a menos que sea el último elemento de la pila, y luego avisa al usuario antes de salir de la aplicación.

@Override 
public void onBackPressed(){ 
    if (isTaskRoot()){ 
     if (backButtonCount >= 1){ 
      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory(Intent.CATEGORY_HOME); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 
     }else{ 
      Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show(); 
      backButtonCount++; 
     } 
    }else{ 
     super.onBackPressed(); 
    } 
} 
Cuestiones relacionadas