studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android activity-finish

programacion - Cómo terminar la actividad actual en Android



manual de programacion android pdf (6)

Cuando desee iniciar una nueva actividad y finalizar la actividad actual, puede hacer esto:

API 11 o superior

Intent intent = new Intent(OldActivity.this, NewActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent);

API 10 o inferior

Intent intent = new Intent(OldActivity.this, NewActivity.class); intent.setFlags(IntentCompat.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent);

Espero que esto pueda ayudar a alguien =)

Tengo una aplicación para Android. Estoy haciendo una pantalla de carga con una barra de progreso.

Ingresé un retraso en el método onCreate. Cuando el temporizador termine, quiero terminar la actividad actual y comenzar una nueva.

Simplemente me da una excepción cuando llama al método finish() .

public class LoadingScreen extends Activity{ private LoadingScreen loadingScreen; Intent i = new Intent(this, HomeScreen.class); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.loading); CountDownTimer timer = new CountDownTimer(10000, 1000) //10 second Timer { public void onTick(long l) { } @Override public void onFinish() { loadingScreen.finishActivity(0); startActivity(i); }; }.start(); } }

¿Cómo puedo cambiar el código para que finalice cuando se hace la barra de progreso?


Debe llamar a finish() desde el hilo de la interfaz de usuario, no a un hilo de fondo. La forma de hacerlo es declarar un controlador y pedirle que ejecute un Runnable en el subproceso de la interfaz de usuario. Por ejemplo:

public class LoadingScreen extends Activity{ private LoadingScreen loadingScreen; Intent i = new Intent(this, HomeScreen.class); Handler handler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); handler = new Handler(); setContentView(R.layout.loading); CountDownTimer timer = new CountDownTimer(10000, 1000) //10seceonds Timer { @Override public void onTick(long l) { } @Override public void onFinish() { handler.post(new Runnable() { public void run() { loadingScreen.finishActivity(0); startActivity(i); } }); }; }.start(); } }


Intenté usar este ejemplo pero falló miserablemente. Cada vez que utilizo para invocar finish () / finishactivity () dentro de un controlador, termino con esta java.lang.IllegalAccess Exception amenazadora. No estoy seguro de cómo funcionó para quien formuló la pregunta.

En su lugar, la solución que encontré fue crear un método en su actividad como

void kill_activity() { finish(); }

Invoque este método desde el método de ejecución del controlador. Esto funcionó como un encanto para mí. Espero que esto ayude a cualquiera que esté luchando con "¿cómo cerrar una actividad desde un hilo diferente?".


Si está haciendo una pantalla de carga, simplemente configure el parámetro para que no se mantenga en la pila de actividades. En su manifest.xml, donde define su actividad, haga:

<activity android:name=".LoadingScreen" android:noHistory="true" ... />

Y en su código no hay necesidad de llamar .finish () más. Sólo haz startActivity (i);

Tampoco es necesario mantener una instancia de su actividad actual en un campo separado. Siempre puede acceder a él como LoadingScreen.this.doSomething() lugar de private LoadingScreen loadingScreen;


Simplemente llama al método finish() :

context.finish();


También puedes usar: finishAffinity()

Termine esta actividad así como todas las actividades inmediatamente debajo de ella en la tarea actual que tienen la misma afinidad.