Reinicie una aplicación para Android completa una vez que haya finalizado AsyncTask

La aplicación que estoy codificando comprueba si hay un archivo ZIP especial en un directorio en / sdcard y empieza a descargarlo y descomprimirlo si no. La descarga y descomprimir funciona finde, incluso con subdirectorios. Pero tengo que reiniciar la aplicación cuando se hace – y eso no funciona.

Al principio tengo una actividad especial "PreMainActivity.java" sólo para reiniciar propósito:

import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class PreMainActivity extends Activity { /** * */ public static Boolean ENABLE_RESTART = false; @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); PreMainActivity.ENABLE_RESTART = true; restartMain(); } @Override public void onRestart() { super.onRestart(); restartMain(); } /** * */ public void restartMain() { if (PreMainActivity.ENABLE_RESTART == true) { final Intent mainIntent = new Intent(this, MainActivity.class); mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(mainIntent); finish(); } else { finish(); } PreMainActivity.ENABLE_RESTART = false; } } 

Entonces tengo algún código dentro del archivo DownloadFile.java

 @Override protected void onPostExecute(final String result) { MainActivity.mProgressDialogDownload.dismiss(); PreMainActivity.ENABLE_RESTART = true; final Intent i = new Intent(MainActivity.this, PreMainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i); } 

Por lo que he investigado tengo que pasar el contexto de mi MainActivity a la DownloadFile.java – pero todavía no tengo ni idea de cómo. ¿Puede alguien gibe me una pista de cómo pasar el contexto a un AsyncTask en un archivo separado dentro del mismo paquete? ¿O cualquier otra sugerencia de cómo reiniciar la aplicación completa después de que una AsyncTask ha terminado?

Necesitará crear un constructor de AsyncTask para pasar Contexto de actividad actual como:

  public Context ctx; public Your_AsyncTask_Class_Name (Context context){ super(); this.ctx=context; } ...... @Override protected void onPostExecute(final String result) { MainActivity.mProgressDialogDownload.dismiss(); PreMainActivity.ENABLE_RESTART = true; final Intent i = new Intent(ctx, PreMainActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(i); } 

Y de la actividad usted puede pasar el contexto como:

 AsyncTask_Class_Name asyktaskobj=new AsyncTask_Class_Name(this); asyktaskobj.execute(); 

Sólo reinicie su main.activity como este:

 Intent intent = getIntent(); finish(); startActivity(intent); 

Ver pregunta: ¿Cómo puedo reiniciar una actividad de Android?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.