Android newbee aquí, tengo un código que quiero ejecutar cuando mi aplicación de Android se inicia por primera vez. Comprueba la versión de la base de datos local y descarga una nueva versión si la versión actual no está actualizada. Lo he estado metiendo en la creación de mi primera actividad, bastante seguro de que tiene que haber un lugar mejor para poner esto. ¿Alguna recomendación de algún lugar donde pueda llamarla una vez al inicio?¿Dónde insertar el código para el inicio de la aplicación?
Respuesta
Puede escribir una clase de aplicaciones personalizadas (se extienden desde android.app.Application).onCreate
anular para especificar lo que sucede cuando se inicia la aplicación:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// Do something here.
}
}
A continuación, tendrá que registrar su clase personalizada en el archivo de manifiesto:
<application ... android:name="fully.qualified.MyApplication">
Editar:
En respuesta a David Cesarino, estoy en desacuerdo con el propósito de la clase Application
. Si confía en Activity
's onCreate
, entonces, ¿qué impide que se convierta en la misma gran clase de propósitos misceláneos ... si necesita que suceda algo al iniciar la aplicación, debe escribir ese código en alguna parte; y el Activity
probablemente se volverá más abarrotado porque también tiene que realizar la lógica específica Activity
. Si te preocupa el desorden, separa la lógica en otras clases y llámalas desde el Application
. Usar el SharedPreferences
para determinar si la lógica debe ejecutarse o no parece ser más una solución a un problema que ya se ha resuelto.
Dianne Hackborn parece estar refiriéndose a los datos, no a la lógica, en lo que estoy totalmente de acuerdo. Las variables estáticas son mucho mejores que las variables de nivel de aplicación ... un mejor alcance y seguridad de tipo hacen que la facilidad de mantenimiento/legibilidad sea mucho más fácil.
Obviamente, el 'SharedPreferences' era un ejemplo de la pregunta extraña en los comentarios (ni siquiera es parte de la respuesta). No estoy diciendo que necesite persistir la versión de la base de datos (o lo que sea) a 'SharedPreferences', ya que ya está" persistente "en la base de datos (para usar en' onUpgrade', * por ejemplo *). Sobre el uso de la clase de aplicación para realizar comprobaciones de bases de datos desde el principio, simplemente aceptemos estar en desacuerdo. Gracias por la respuesta. – davidcesarino
Entendido, no quise centrarme en el aspecto 'SharedPreferences', sino en el requisito de decir: ' if (someCondition) { // Ejecutar algo. } ' Para mí, para eso se creó la 'Aplicación' ... Supongo que son solo dos formas de verlo, y como dijiste ... aceptas estar en desacuerdo. –
¡No se preocupe, no hay problemas! :-) – davidcesarino
En primer lugar, un vistazo a la Activity lifecycle.
Respondiendo a su pregunta, se puede poner el código en cualquiera de esos métodos "puesta en marcha", dependiendo de lo que quiere hacer y, sobre todo importante, cuando desea disparar eso. Por lo que pidió, onCreate
es el lugar razonable.
Lo he estado pegando en la oncreate de mi primera actividad, bastante seguro de que tiene que haber un lugar mejor para poner esto.
Y eso por qué? Cualquier código tiene un entrada punto, ¿verdad? En las actividades de Android, simplemente es onCreate
(de nuevo, consulte el enlace anterior para obtener más información). Además del manejo de eventos, que son respuestas a eventos que suceden fuera de la secuencia principal de llamadas, pones cosas en onCreate
.
Si le preocupa que el método sea enorme, ese es otro problema. Resuma su código mejor, digo. Para verificar las cosas preliminares, las personas generalmente proporcionan una actividad de "carga" antes de comenzar la actividad principal de la aplicación.
Editado:
Esta es una continuación de lo drumboog propuesta, ya que mi comentario comenzó a crecer en complejidad a ser "sólo un comentario".
Personalmente, evitaría extender la clase Application
por la única razón de ejecutar código desde el principio, más aún un código que no es tan sensible en prioridad (bases de datos de versiones). La clase Application
se utiliza principalmente como una manera fácil de mantener el estado entre Activity
's, no como una forma de 'hacer todo'. En resumen, creo que la clase Application
es comúnmente abusada.
Para lo que desee, podría perfectamente alcanzar ese código de llamada en Activity
onCreate
. Eso reduce la complejidad, porque he visto personas rellenar Application
hasta que se convierta en una gran clase de códigos misceláneos. Y eso es un no-no para el mantenimiento, con problemas de lógica propios.
Además, si realmente quieres otra solución, completamente desasociado con la IU, deberías pensar en implementar un Service
(pero no creo que sea necesario para eso).
Ambos those concerns were previously addressed by Dianne Hackborn (o lo que obtuve de su mensaje).
Y aún así, casi siempre hay mejores formas de persistir el estado (estática etc.). He contado con los dedos de una mano cuántas veces amplié la clase 'Application'. – davidcesarino
Gracias lo intentaré :) – tobylang
De nada. Siéntase libre de preguntar cualquier otro detalle. – davidcesarino
- 1. ¿Dónde poner el código de inicio de Django?
- 2. ¿Dónde pongo el código de inicio en Play Framework?
- 3. ¿Cómo puedo cambiar el código de la pantalla de inicio predeterminada de Android y reemplazar el código fuente de la aplicación de la pantalla de inicio personalizada?
- 4. Dónde poner el estado de la aplicación?
- 5. El mejor lugar para insertar el código de Google Analytics
- 6. ¿Dónde pongo el código de limpieza en una aplicación Flask?
- 7. Ejecutar la aplicación en el inicio
- 8. Dónde está el código fuente para Html.TextBoxFor
- 9. Obtenga el tiempo transcurrido desde el inicio de la aplicación
- 10. Activación de la migración de EF al inicio de la aplicación mediante el código
- 11. código de inicio de aplicación personalizado para el sitio web de umbraco
- 12. ¿Dónde puedo modificar el código de vista de administrador para una aplicación de terceros?
- 13. La aplicación web para iPhone desde la pantalla de inicio siempre recarga el cambio entre aplicaciones
- 14. Dónde poner el código común para iPhone, CLLocationManager
- 15. Mejorar el tiempo percibido de inicio de la aplicación WPF
- 16. ¿Dónde encontrar el código fuente de BitTorrent?
- 17. Cómo insertar el código CIL en C#
- 18. ¿Corregir el código de estado HTTP para el formulario de inicio de sesión?
- 19. Configurar log4net RollingFileAppender en el código que se ejecuta una vez por inicio de la aplicación
- 20. Acelerar el inicio de la aplicación en Jetty
- 21. Android Obtenga el Directorio de datos de la aplicación 'Inicio'
- 22. ¿Diferencia entre la biblioteca y el código de la aplicación?
- 23. Webapp2 para la autenticación y el inicio de sesión
- 24. ¿Dónde está el método de inicio de un servicio WCF?
- 25. Deshabilitar el botón de inicio en la aplicación de pantalla de inicio?
- 26. ¿Dónde puedo encontrar la aplicación para IVCWizCtlUI
- 27. ¿Dónde está el punto de entrada para una aplicación Rails?
- 28. cómo perfilar el inicio de la aplicación con visualvm
- 29. Ejecutar la aplicación Java en el inicio de Windows
- 30. Dónde definir el número de versión de la aplicación Rails
¿Por qué dices que debería haber un lugar mejor para poner el código de inicio? OnCreate() debe hacer exactamente lo que usted desea. – Snailer
Realice una actividad de pantalla de carga y agregue el código de verificación de su versión. –
Snailer Si dejo el código en la actividad y luego tengo que suspender o volver a crear la actividad, ese código se llama una y otra vez. – tobylang