¿Cómo forzar programaticamente un reinicio completo de la aplicación? por ejemplo, matar, a continuación, iniciar

Tengo una aplicación que incluye tanto un servicio complejo como una IU de actividad. La aplicación se ejecuta en varios dispositivos que se comunican entre sí a través de WIFI a través del servicio.

Dado que la aplicación es un prototipo / en desarrollo, quiero añadir soporte para un "reinicio de la fuerza" que va a matar la aplicación y volver a lanzar limpio. Hay un montón de cosas compartidas de interfaz de usuario que se ha acumulado dependiendo del caso de uso, y sería más fácil durante la prueba (tengo varios dispositivos) si sólo podía tocar un botón para reiniciar la aplicación completamente.

Por lo tanto, ¿alguien tiene alguna sugerencia sobre cómo:

1) Forzar cierre / detener / matar su propia aplicación, desde dentro de su aplicación.

2) Establezca un temporizador / intención que indique al sistema operativo que inicie su aplicación antes de cerrar / detener / matarla.

Cualquier sugerencia sería apreciada! Gracias.

Utilice el siguiente código para reiniciar la aplicación:

Intent mStartActivity = new Intent(HomeActivity.this, SplashScreen.class); int mPendingIntentId = 123456; PendingIntent mPendingIntent = PendingIntent.getActivity(HomeActivity.this, mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager mgr = (AlarmManager) HomeActivity.this.getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent); System.exit(0); 

Como se puede averiguar, finish () es lo que quieres usar para matar una actividad. La forma de ACR funcionaría, sin embargo sólo reiniciará su actividad, no matará realmente el proceso y lo iniciará de nuevo. Si eso es lo que estás buscando, en lugar de tener una Actividad ficticia que reinicie tu Actividad original, la forma correcta de hacerlo sería usar banderas.

 Intent i = new Intent(this, WrapperActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(i); 

Esas banderas despejarán tu pila trasera hasta la primera instancia de cualquier actividad que estés creando, la matará y luego creará una nueva. Esto es esencialmente lo que el ejemplo de ACR está haciendo, pero es mucho más conciso.

Si esto no es lo suficientemente bueno para usted, Para hacer esto correctamente, es un poco de trabajo, y requiere un conocimiento más avanzado del sistema Android. Desea crear un servicio que se ejecute en segundo plano (tendrá que ser un proceso independiente si desea que el estado del nivel de aplicación sea eliminado) que podría iniciar cuando quiera eliminar la aplicación, hacer que la aplicación se mate o el servicio cancela la aplicación para usted y, a continuación, haga que el servicio inicie una intención que inicie su actividad / aplicación.

¡Espero que esto ayude! ¡La mejor de las suertes!

Pruebe el siguiente código para reiniciar la aplicación.

 Intent i = getBaseContext().getPackageManager() .getLaunchIntentForPackage(getBaseContext().getPackageName()); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); 

No se puede hacer. El sistema operativo decide cuándo eliminar una aplicación. Su aplicación puede volver a la vida si estaba realmente muerto o simplemente escondido.

Esto es inconveniente, pero la plataforma funciona así. Puede producir el mismo efecto de usuario al administrar sus actividades, que puede eliminar y restaurar.

Puede haber una forma más oficial de hacer esto, pero aquí es cómo podría lograr esto.

Por ejemplo voy a fingir que hay solamente dos actividades, la que estás actualmente adentro (lo llamaré FirstActivity), y otra actividad del "ayudante" (llamaré SecondActivity).

En el primero (el que desea reiniciar desde), tendría un botón que inicia el reinicio de la aplicación.

 restartButton.setOnClickListener(new OnClickListener(){ @Override onClick(View v){ //when clicked it starts the helper activity and closes the one you're in startActivity(new Intent(this, SecondActivity.class)); finish(); //or you could use FirstActivity.onDestroy(); if you want it completely dead } }); 

Segunda Actividad: Todo el propósito es que básicamente puedes reiniciar la aplicación desde tu aplicación (cerrar todo lo demás y luego reiniciarlo en esto)

 Class SecondActivity extends Activity{ @Override onCreate(Bundle savedInstanceState){ ... //it restarts the old activity so it's new and ends this one startActivity(new Intent(this, FirstActivity.class)); finish(); //or you could use SecondActivity.onDestroy(); if you want it } } 

Esto reiniciará completamente la primera actividad. No estoy seguro de si será tan completo como usted desea, pero realmente no hay otra manera de hacer este tipo de cosas AFAIK.

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