Cómo finalizar la actividad actual en Android

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

Ingresé un retraso en el método onCreate. Cuando el temporizador finaliza, quiero finalizar 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 completa la barra de progreso?

Si está haciendo una pantalla de carga, simplemente configure el parámetro para no mantenerlo en la stack de actividades. En su archivo manifest.xml, donde define su actividad, haga lo siguiente:

  

Y en su código ya no es necesario llamar a .finish (). Simplemente inicie Activity (i);

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

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

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

 void kill_activity() { finish(); } 

Invoca este método desde dentro del método de ejecución del controlador. Esto funcionó como un encanto para mí. Espero que esto ayude a cualquiera a luchar con “cómo cerrar una actividad desde un hilo diferente”.

Necesitas llamar a finish() desde el hilo de UI, no a un hilo de fondo. La forma de hacerlo es declarar un controlador y pedirle al controlador que ejecute Runnable en el hilo 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(); } } 

Simplemente llame al método finish() :

 context.finish(); 

Cuando desee comenzar una nueva actividad y terminar 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 =)

También puede usar: finishAffinity ()

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