2012-01-17 11 views
6

No sé por qué es tan difícil de descifrar. Tengo mi actividad principal que, cuando se inicia, comprueba si es la primera vez que se abre. Si es así, cierra la actividad principal y abre la actividad de configuración/presentación con FLAG_ACTIVITY_NEW_TASK. El proceso de instalación consta de tres actividades (A, B y C). Al final de la actividad C, ¿cómo puedo hacer que se borre y la tarea de configuración que contiene A, B y C y comenzar de nuevo la actividad principal? He intentado agregar FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TOP a la actividad principal Intent pero cuando presiono ATRÁS, vuelve a la actividad C del proceso de configuración. ¿Cómo logro borrar la tarea de las actividades A, B y C cuando C termina e inicia el principal? ¡Gracias!Tarea de borrado e inicio de una nueva actividad

Estoy construyendo en Android 1.6 (API 4), por lo que algunas de las banderas Activity pueden estar limitadas.

+0

Finaliza la Actividad C cuando pasas a la actividad principal. – Mudassir

+0

borrar la bandera solo quita una actividad de la pila, ¿no? – L7ColWinters

+0

@Mudassir Si acabo de terminar la Actividad C, cuando presiono ATRÁS desde la actividad principal, solo va a la Actividad B. – Brian

Respuesta

0

Me respondió una pregunta similar here

Como Mudassir dice en su comentario sólo finish() sus actividades inmediatamente después de comenzar una nueva.

+0

No, quiero que el usuario pueda retroceder un paso si lo necesita durante el proceso de instalación. Todo lo que quiero es terminar la pila de actividades de configuración cuando finalice el último paso. – Brian

2

FLAG_ACTIVITY_CLEAR_TOP borrará las actividades de la misma instancia de actividad. Aquí en su caso, todas sus actividades son de instancias diferentes, por lo que FLAG_ACTIVITY_CLEAR_TOP no funcionará. Para borrar su tarea, cree una instancia de actividad en cada una de sus actividades y asigne esa instancia 'esto' en su método onCreate de cada actividad. siempre que quiera borrar su tarea, jus llame a instance.finish(). y comienza la actividad que quieras.

+1

¿Puede esto finalizar todas las TRES actividades a la vez ..? – Mudassir

+0

no es una vez, ves que tienes Actividad A, B, C. Para terminar todo esto a la vez, solo tiene que hacer algo similar debajo de activityA_instace.finish(); activityB_instace.finish(); activityC_instace.finish(); también asegúrese de que sus instancias sean públicas estáticas de la actividad en la que ha declarado. Si es así, en realidad puede borrar su tarea de cualquier lugar por la forma en que acabo de mostrar arriba – amandroid

+0

¿Qué quiere decir exactamente por ejemplo? ¿Puedes explicar usando algún código? – Mudassir

0
class A extends Activity { 
public static Activity instanceOfA = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfA = this; 
} 
} 

class b extends Activity { 
public static Activity instanceOfB = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfB = this; 
} 
} 


class c extends Activity { 
public static Activity instanceOfC = null; 

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    instanceOfC = this; 
} 
} 

Ahora supongamos que desea borrar toda la tarea de su actividad actual, a continuación, llamar instanceOfA.finish(); instanceOfB.finish(); instanceOfC.finish();

+9

Esto es inaceptable. Está filtrando todas las actividades y todos los recursos (ver hiarerchies, * images *) asociados a ellos. –

+0

Algo similar a esto [respuesta] (http://stackoverflow.com/a/3008684/269876) le conviene más. Como señala @JonasAlves, estás filtrando todas esas actividades mediante el uso de estadísticas. En su lugar, genere un mensaje que pueda transmitir cuando se complete la configuración y haga que cada actividad de configuración escuche la transmisión. Cuando reciben la notificación de configuración completa, pueden terminar ellos mismos, y no se necesitan estadísticas para lograrlo. –

+2

Las referencias estáticas a las actividades significan que sus vistas permanecen en la memoria y no se reciclan, lo que provoca una pérdida de memoria. – George

1

En realidad esto se puede lograr con startActivityForResult

public class A extends Activity { 
    public onButtonClick() { 
     startActivityForResult(new Intent(this, B.class), 0); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
     finish(); 
     } 
    } 
} 

public class B extends Activity { 
    public onButtonClick() { 
     startActivityForResult(new Intent(this, C.class), 0); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (resultCode == RESULT_OK) { 
     setResult(RESULT_OK); 
     finish(); 
     } 
    } 
} 

public class C extends Activity { 
    public onButtonClick() { 
     setResult(RESULT_OK); 
     finish(); 
    } 
} 

Creo que este es el camino correcto, que no se escapan de esta manera nada.

PD: Sé que esta es una publicación anterior, pero tal vez alguien lo encuentre útil.

Cuestiones relacionadas