2011-10-25 13 views
5

Tengo un WebView en mi aplicación de Android desde el que nuestro servidor llama mucho Javascript. Quiero implementar un sistema donde una señal del servidor despierte/reinicie la aplicación y la ponga al frente para alertar al usuario. Sé que esto es terriblemente desagradable, pero en mi caso es necesario.Android webview dentro de un servicio?

Parece que la única manera de lograr esto es tener la WebView en vivo en un Servicio (porque el OS puede matar las Actividades en cualquier momento). ¿Alguien sabe cómo esto funcionaría? He leído que WebViews solo puede residir en Actividades.

Gracias!

Respuesta

4

Las WebViews solo pueden residir en actividades porque son un componente de la interfaz de usuario. La mejor manera para que usted resuelva este problema es descargar la comunicación que su javascript está haciendo en el servicio mismo. Así es como funciona Android. La única otra solución es hacer que su comunicación javascript/servidor sea lo suficientemente tolerante a los fallos que pueda soportar perder la conexión en cualquier momento. Para ideas sobre cómo hacer esto, examinaría el modelo REST. Si desea obtener una mejor idea sobre el uso de REST con android, sugiero este video from Google IO. Hasta hoy, es uno de mis favoritos.

En cuanto a enviar una señal desde el servidor para iniciar una actividad, esta es una posibilidad en cierta medida. Necesitará tener algo escuchando en el dispositivo, muy probablemente un servicio. Podría hacer que su servicio haga una encuesta larga y, por lo tanto, simplemente sentarse allí esperando una respuesta. Cuando es obtener la respuesta del servidor, podría entonces hacer un

Context.startActivity(intent) 

Cuando la intención es la intención explícita especificando la actividad que desea iniciar. Dicho esto, un servicio también se puede eliminar si los recursos escasea en el dispositivo. Además de eso, la conexión a internet podría perderse en cualquier momento (estos son teléfonos móviles y las personas a menudo toman los teléfonos celulares en lugares donde no tienen conectividad a Internet).

La conclusión es que los dispositivos no están diseñados para ser 100% confiables en términos de conectividad. Lo más inteligente que puede hacer es cambiar las especificaciones de su aplicación para que sean más tolerantes a las fallas.

Puede parecer franco, pero no hay mucho más que decir aparte de "No hagas esto. No hagas esto nunca". De manera más constructiva, diría que si haces las cosas bien, deberías poder llevar tus cosas a un segundo plano y nunca molestar al usuario con ellas. Recuerda, KISS, no es solo una banda con un ejército. Es una hermosa filosofía. Que sea simple estúpido. Tal vez quieras echar un vistazo a este video, es uno de mis favoritos y podría ayudarte a tener un estado de ánimo diferente. ¿Eso es útil?

+0

OK, eso tiene sentido. ¿Podrías arrojar algo de luz sobre el problema de volver a poner mi aplicación al frente? – TomBomb

+0

Edité mi respuesta para dirigirle más preguntas. –

+0

Gracias Kurtis, esto es de gran ayuda. Estoy trabajando para no confiar totalmente en que la actividad/servicio esté vivo en todo momento. Estoy comenzando la actividad como se describió anteriormente, sin embargo, mi problema es que necesito que mi aplicación vuelva a enfocarse una vez que se inicia el intento. Si el usuario está en otra aplicación cuando llamo a startActivity(), mi aplicación permanece en segundo plano. ¿Alguna idea? – TomBomb

1

TomBomb, gracias por aceptar mi respuesta anterior, pero creo que podría tener algo más de utilidad para usted. En lugar de forzar a una actividad a entrar en primer plano, ¿por qué no utilizar un Status Bar Notification para que los usuarios sepan que algo nuevo del servidor ha entrado?