2010-11-09 28 views
15

Mientras la aplicación se está ejecutando, presiono el botón INICIO para cerrar la aplicación. Cuando inicio de nuevo la aplicación, se reanuda en la página que se muestra antes de hacer clic en INICIO. Quiero que la aplicación comience con la pantalla inicial en su lugar. He utilizado finish() para finalizar la actividad pero no está funcionando. ¿Alguna sugerencia?¿Cómo destruir una actividad en Android?

+0

¿dónde colocaste el 'finish()'? En la mayoría de los casos, presionar Inicio solo pone la actividad en pausa, a menos que Android necesite esa pieza de memoria con urgencia. – xandy

+0

No nos explicó dónde terminó(). – cababunga

+0

@Nikki: ¿Puedes publicar el código, para que podamos encontrar qué mal hiciste en ese código? –

Respuesta

20

Lo más probable es que tenga varias instancias de la misma actividad. Para resolver este tipo de problemas, crea tu propia clase de actividad principal, p. MyRootActivity que celebrará lista estática de todas las actividades disponibles/viva:

public class MyRootActivity extends Activity 
{ 
    private static final String TAG=MyRootActivity.class.getName(); 
    private static ArrayList<Activity> activities=new ArrayList<Activity>(); 


    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     activities.add(this); 
    } 

    @Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 
     activities.remove(this); 
    } 

    public static void finishAll() 
    { 
     for(Activity activity:activities) 
      activity.finish(); 
    } 
} 

Para que todas sus actividades tiene por qué ser hijos de MyRootActivity.

Luego, cuando esté a punto de asegurarse de que está cerrando su aplicación, simplemente llame a MyRootActivity.finishAll();

+0

private static ArrayList actividades = new ArrayList ; causando error en mi código ... Decir Error de sintaxis en el token (s), construcción fuera de lugar (s) Cuál podría ser reson – piku

+2

@piku: Tengo el mismo error en esa misma línea" ... nueva ArrayList ; ". Estoy bastante seguro de que se supone que es "private static ArrayList activities = new ArrayList ();" - ver el paréntesis? –

-2

intente llamar super.onPause() primero y luego llamar finish() dentro de su onPause() talón de

+0

No es una buena idea, es un diseño muy anti patrón. – visc

0

Crear un objeto de la actividad estática que la actividad de meta en otra actividad y asignar actividad en este ejemplo se puede agregar más actividades

public class demoActivity extends AppCompatActivity { 
    public static Activity self_intent; 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.demo_activity); 
      selfintent=this; 
    } 

    //Other functions-------------- 
} 

hacer lo mismo para otras actividades

en otra

public class finishingActivity extends AppCompatActivity { 
     public Button activityCloseBtn; 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.finishing_activity); 

      activityCloseBtn= (Button) view.findViewById(R.id.activity_close_btn); 
      activityCloseBtn.setOnClickListener(new View.OnClickListener() {  
      @Override 
      public void onClick(View v) { 
       demoActivity.selfintent.finish(); //for finish demoActivityactivity 

       //for other activities Activity.selfintent.finish(); 
       finish(); //for finish current activity 
      } 
    }); 
Cuestiones relacionadas