2011-12-23 16 views

Respuesta

1

uso finish() para cada actividad

1) Activity lifecycle

2) Shutting down Activity and managing Activities lifecycle

3) La misma pregunta answered in detail (2 enfoques - receptor de radiodifusión (1) y Intent.FLAG_ACTIVITY_CLEAR_TOP)

+0

Hola, gracias por responder uso finish() en cada actividad, pero luego mi botón de retroceso móvil no funciona si presiono volver cerrar mi aplicación – vijay2991

+0

depende de lo que estés tratando de lograr. ¿Desea hacer clic en Cerrar sesión y cerrar su programa, pero en cualquier otro caso, al presionar el botón Atrás, desea que las Actividades anteriores sean visibles? – hovanessyan

+0

sí, en realidad tengo la función de inicio de sesión y cierre de sesión para el usuario, así que quiero cuando el usuario inicie sesión, puede navegar en mi aplicación fácilmente usando el botón de retroceso móvil o el menú, pero cuando hago clic en cerrar sesión, quiero cerrar la actividad y no puede entrar a la página anterior sin iniciar sesión de nuevo ... y agradecer a hovanessyan por darme tu valioso tiempo ... :-) – vijay2991

0
@Override 
    public void onClick(View v) { 

     if (v == btnAtGlanceBack) { 
      Intent backIntent = new Intent(this, Dashboard.class); 
      startActivity(backIntent); 

     } else if (v == btnAtGlanceLogOut) { 
      Intent logoutIntent = new Intent(this, GlobalScholarLogin.class); 
      logoutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(logoutIntent); 

     } 
    } 
0

In gen La pila principal de Android para todo lo que activas es tu lanzamiento y la eliminas en función de la forma en que llames a la siguiente actividad. Si desea borrar toda la actividad, configure este indicador Intent.FLAG_ACTIVITY_CLEAR_TASK al iniciar la actividad para limpiar la actividad anterior.

3

EDITAR

Sam Janz respuesta es más limpio que este método. Usar la intent flags a su ventaja

Cuando el usuario presiona Cerrar sesión:

Intent intent = new Intent(this,MyHomeActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
intent.putBooleanExtra("finishApplication", true); 
startActivity(intent); 

Luego, en MyHomeActivity (Su actividad inicial) in onResume:

if(getIntent().getBooleanExtra("finishApplication", false){ 
    finish(); 
} 

De esta manera usted no tiene que tener verifica en toda tu actividad solo la actividad de Inicio. opción


Dirtier:

Crear una variable booleana estática en un producto único en alguna parte (probablemente en una clase que extienda la aplicación);

public static boolean loggingOut = false; 

Cuando el usuario presiona cerrar sesión, configure esto como verdadero y finalice la llamada en esa actividad.

YourApplication.loggingOut = true; 
finish(); 

En cada activity in onResume()

if(loggingOut){ 
    finish(); 
} 

asegurarse de que establece esta booleano volver a falso en su puesta en marcha la actividad principal /:

if(loggingOut){ 
    finish(); 
    YourApplication.loggingOut = false; 
} 

Si también desea que el botón de retroceso para hacerlo , override onBackPressed(), que también haría

@Override 
public void onBackPressed(){ 
    YourApplication.loggingOut = true; 
    super.onBackPressed(); 
} 
0

Para despejar toda pila que está rastreando sus actividades en Android puede utilizar el código siguiente

Intent intent = new Intent(this, MyHomeActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     finish(); 
     startActivity(intent); 
0

poner esta línea de código en su aplicación System.exit (2);

1

Gracias por sus respuestas. Resolví mi problema.

Solución: escribo un archivo con algunos datos y cuando el usuario hace clic cierre de sesión, elimino los datos de ese archivo y finish() actividad actual, y todo en la actividad anterior escribo código en onResume() leí archivo y si es blanco o nulo finish() por lo que cerrará toda tu actividad y tu aplicación se acercará. Gracias por la gran ayuda.

+2

¿No puedes marcar tu propia respuesta como resuelta? – TryTryAgain

+1

abusar de un archivo con datos arbitrarios como indicador probablemente no sea el mejor diseño. Al menos podrías convertirlo en booleano en algunos singleton o algo así. – katzenhut

6

Esta es una solución que he probado y me funcionó a la perfección.

SOLUCIÓN-1

this.finish();//try activityname.finish instead of this 
Intent intent = new Intent(Intent.ACTION_MAIN); 
intent.addCategory(Intent.CATEGORY_HOME); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(intent); 

uso esto en la actividad en la que desea salir de su aplicación ....

============= =============================================== =================== El código anterior le ayuda a reanudar su aplicación la última vez que la dejó.

SOLUCIÓN-2

Si desea salir de la aplicación y también cerca de todas las actividades en ejecución que necesita para su uso.

onActivityResult() 

Para EG supongamos que hay 3 actividades A, B, C se desplaza desde A-> B-> C y en C que desea cerrar todas las actividades a continuación, utilizar siguiente ejemplo.

Actividad A

public class A extends Activity { 
int Finish = 100; 
Button launch_second; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    launch_second = (Button) findViewById(R.id.start_second_act); 
    launch_second.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent second = new Intent(A.this, 
        B.class); 
      startActivityForResult(second, Finish); 
     } 
    }); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case 100: 
     this.finish(); 
     break; 
    default: 
     break; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 

} 

Actividad B

public class B extends Activity { 
private Button launch_next; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second_main); 
    launch_next = (Button) findViewById(R.id.start_third_activity); 
    launch_next.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent third = new Intent(B.this,C.class); 
      startActivityForResult(third, 100); 
     } 
    }); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
    case 100: 
     setResult(requestCode); 
     this.finish(); 
     break; 

    default: 
     break; 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

} 

Actividad C

public class C extends Activity { 
Button kill_app; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.third_main); 
    kill_app = (Button)findViewById(R.id.kill_app_btn); 
    kill_app.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      C.this.finish(); 
      setResult(100); 

     } 
    }); 

} 

} 

solución de 3

Hay i s método disponible finishAffinity() llamarlo desde cualquier actividad, todas las actividades anteriores se destruirán.

+1

Esto cierra la aplicación pero no termina las actividades. Si vuelves a abrir la aplicación, no vas a la actividad principal. –

+1

@BraisGabin He actualizado la respuesta, verifique la respuesta actualizada, espero que pueda ayudar a otros que busquen la solución –

+0

@SagarG., Esta opción hará que el "Botón Atrás" no funcione como siempre. En su lugar, hará que el botón funcione como "Cerrar todo y salir". Y ese no es el efecto que queremos obtener. ¿Cómo resolverlo? – gumuruh

0

puede agregar una lista en la Solicitud que guardar todas las actividades que ha creado. y cuando salga, solo tiene que finalizar toda la actividad en la lista.

1
Intent intent = new Intent(this, LoginActivity.class); 
ComponentName cn = intent.getComponent(); 
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn); 
startActivity(mainIntent); 

Descripción:

public static Intent makeRestartActivityTask (ComponentName mainActivity) 

Hacer una Intención que se puede utilizar para volver a poner en marcha la tarea de una aplicación en su estado base. Esto es como makeMainActivity (ComponentName), pero también establece los indicadores FLAG_ACTIVITY_NEW_TASK y FLAG_ACTIVITY_CLEAR_TASK.

Cuestiones relacionadas