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.