¿Cómo reiniciar una aplicación completamente?
Tengo una aplicación que inicia un servicio remoto en su primera actividad iniciada. Luego, en otra actividad, el usuario puede configurar la configuración de la aplicación. Tenga en cuenta que esta segunda actividad no está vinculada al Servicio y no deseo vincularlo.
Ahora mi pregunta es: ¿cómo podría reiniciar toda la aplicación de la segunda actividad, después de cambiar la configuración?
- ¿Para fragmentar o no fragmentar?
- Icono del lanzador de aplicaciones que se muestra en la barra de acción de una actividad
- Borrar la pila de actividades e iniciar una nueva actividad en android
- Debería tener referencias a fragmentos dentro de mi actividad
- Obtener contexto de actividad en un adaptador de un fragmento
Por ahora, estoy usando un botón que onClickListener es:
public void onClick(DialogInterface dialog, int which) { sauvegarde(); Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName()); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); }
El problema es: sólo reinicia la actividad actual sin cerrar la aplicación completa y, por lo tanto, sin reiniciar el servicio
¿Algunas ideas?
- Cómo iniciar la actividad desde el widget de pantalla de inicio de Android
- Android termina las actividades anteriores para la navegación
- Android Cambia el texto de TextView de otra clase
- Prueba de unidad de Android con ActivityInstrumentationTestCase2, getActivity () se bloquea cuando el caso de prueba anterior provoca que se inicie otra actividad
- Uso de Diálogos vs Actividades
- Definir actividad predeterminada (cuando se inicia la aplicación) mediante programación
- ¿Qué sucede cuando mi actividad se destruye cuando estoy usando IntentService con ResultReceiver
- Android onActivityResult
Puedes usar el sistema AlarmManager de Androids como este:
Código para reiniciar la aplicación en tu actividad:
AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this.getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags())); System.exit(2);
Un ejemplo puede ser buscado aquí
ACTUALIZAR
Como @CommonsWare señaló, es una mala manera de diseñar su aplicación, cuando usted tiene que reiniciarlo (mala práctica). Si realmente quieres hacerlo, puedes intentar establecer alarmmanager para iniciar tu aplicación en un segundo después de matar tu propio proceso:
AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this.getBaseContext(), 0, new Intent(getIntent()), getIntent().getFlags())); android.os.Process.killProcess(android.os.Process.myPid());
prueba esto
public void reload() { Intent intent = getIntent(); overridePendingTransition(0, 0); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); overridePendingTransition(0, 0); startActivity(intent); }
Prueba este código,
public void onClick(DialogInterface dialog, int which) { sauvegarde(); restart(2); }
Método de reinicio
public void restart(int delay) { Intent launchIntent = new Intent(context, YourStartUpActivity.class); PendingIntent intent = PendingIntent.getActivity(getApplicationContext(), 0, launchIntent , 0); AlarmManager manager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); manager.set(AlarmManager.RTC, System.currentTimeMillis() + delay, intent); System.exit(2); }
In your restart activity añadir esto
restart.this.finish(); getActivity(otheractivity.class).finish(); Intent in = new Intent(this,main.class); startActivity(in);
Para cada actividad agregue getactivity (yourclassname) y finalice la actividad. Si agrega toda su actividad como esta su aplicación close & restart
Solución de AlarmManager
no puede funcionar porque en la aplicación de matar todas las intenciones pendientes pueden ser eliminados. En android-10 tengo este problema.
Pero encontré otra manera – crear la clase Instrumentation
y llamar startInstrumentation
en Context
. Funcionó muy bien.
Boolean android.content.Context.startInstrumentation (ComponentName className, String profileFile, Argumentos del paquete)
Comience a ejecutar una clase android.app.Instrumentation. El componente Instrumentation dado se ejecutará eliminando su aplicación de destino (si está en ejecución), iniciando el proceso de destino, instanciando el componente de instrumentación y dejándolo conducir la aplicación.
Esta función no es síncrona – vuelve tan pronto como la instrumentación ha comenzado y mientras está funcionando.
Normalmente, la instrumentación sólo se permite ejecutar contra un paquete que no está firmado o firmado con una firma con la que también se firma el paquete de instrumentación (garantizando que el objetivo confía en la instrumentación).
Instrumentation
debe ser definida en el manifiesto. Google cómo usarlo.
- Uso de android.support.v4.app o android.app para DialogFragment?
- ¿Cómo instalar la aplicación HTML5 en Android Market y Apples AppStore?