2011-06-29 13 views
11

Mis aplicaciones Android aplicación tiene un WebView que requiere el plugin de Flash. La vista web proporcionará un enlace Market a Adobe Flash si no está instalado. Después de instalar Flash, la única forma de crear una instancia en mi aplicación es forzar el cierre y reiniciar la aplicación. Me gustaría presentar un botón para el usuario que hace esto por ellos porque es demasiado complicado para los usuarios ocasionales para abrir sus procesos en ejecución y forzar el cierre de la aplicación de forma manual. ¿Cuál es el código de Java para implementar dicho botón de reinicio?Cómo forzar a salir de la aplicación de Android y reiniciarlo?

+3

Por qué es exactamente lo que necesita forzar salir y reiniciar su aplicación para inicializar las cosas? Simplemente llame de nuevo al código de inicialización después de instalar el flash. –

+1

¿Realmente necesita forzar el cierre de la aplicación? ¿No bastaría simplemente con cerrar la Actividad que aloja el WebView? – Squonk

+1

excepción de proyección: P –

Respuesta

27

Puede reiniciar su aplicación en dos pasos:

  1. matar a su propio proceso. Utilice Process.myPid(), pasarlo a Process.killProcess(). Es posible que deba agregar un permiso a su manifiesto (posiblemente android.permission.KILL_BACKGROUND_PROCESSES) para que esto funcione.
  2. Antes de matar a su propio proceso, para registrar una alarma con una intención pendiente para reiniciar su actividad en un futuro muy próximo. El segundo parámetro para alarm.set es triggerAtTime. Si lo configura en 0, la alarma se disparará inmediatamente. El ejemplo aquí establece un momento para iniciar la aplicación un segundo en el futuro.

El Código dice así:

AlarmManager alm = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
alm.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, PendingIntent.getActivity(this, 0, new Intent(this, this.getClass()), 0)); 
+0

¿Cómo accedo a este objeto 'Proceso' desde mi' Actividad' principal? – JoJo

+0

Estos métodos en Process son estáticos. Deberías solo poder llamarlos. – mportuesisf

+0

Sí, esto funciona. Tenemos un botón de administrador que hace un apagado limpio de varias cosas antes de llamar a 'Process.sendSignal (Process.myPid(), Process.SIGNAL_KILL)' – jtoberon

0

supongo que se podría llamar finish para hacer su parada de actividad, pero usted no será capaz de hacer su aplicación para empezar de nuevo otra vez. Eso requeriría (si es que es posible) root y sería una idea terrible. Significaría que cualquier aplicación podría iniciarse a sí misma siempre que quisiera: lo cual es solo una mala idea y, en realidad, sería un error si fuera posible.

+0

¿'' Activity.finish' realmente fuerza salir de la aplicación? Parece que solo almacena la aplicación en la memoria. Cuando ejecuté el código, cerró la aplicación. Pero cuando fui a administrar la aplicación, el botón "Forzar parada" aún estaba activado. Ese botón debería estar deshabilitado si la aplicación no se encuentra en la memoria. Por alguna razón, Flash requiere que la aplicación se quede sin memoria y luego se reinicie para que sea reconocida por 'WebView'. – JoJo

+0

@JoJo: Activity.finish solo cierra la actividad actual. ¿Terminaste todas las actividades en la aplicación o solo una? Porque si todavía existen actividades o procesos en segundo plano, naturalmente, la aplicación seguirá existiendo también. –

+0

Agregué 'this.finish()' al final de 'Activity.onCreate'. Entonces, cuando inicias la aplicación, se cierra de inmediato. ¿No debería esto causar que la única actividad se cierre? – JoJo

-1

se puede salir de la aplicación con System.exit (0): esto no requiere permiso para que su aplicación

Cuestiones relacionadas