Pregunta

Estoy tratando de crear una Palm OS de la aplicación para comprobar un sitio web cada X minutos o horas, y proporcionar una notificación cuando una pieza de datos está disponible.Sé que este tipo de cosa se puede hacer en el nuevo Palm - por ejemplo, en mi Centro han de correo electrónico o sitios web de descarga cuando la aplicación no está en la cima, pero no sé cómo hacerlo.Puede alguien me apunte en la dirección correcta?

¿Fue útil?

Solución

Esto es posible de hacer, pero muy difícil.Hay varios pasos que tendrá que tomar.

En primer lugar, esto sólo funciona en Palm OS 5 y es incompleta en algunos de los principios de Palm OS 5 dispositivos.Los dispositivos más recientes son mejores, pero no es perfecto.

Siguiente, usted tendrá que crear una alarma para su aplicación usando AlmSetAlarm.Esta es la forma de lograr el "cada X minutos o horas" parte.

Cuando la alarma de incendios, la aplicación obtendrá una sysAppLaunchCmdAlarmTriggered lanzamiento de código, incluso si no se está ejecutando.Si sólo quieres hacer algo sencillo y rápido, usted puede hacerlo en respuesta al lanzamiento de código y listo.

Después de hacer sus cosas en la alarma de lanzar el código, asegúrese de establecer la siguiente alarma por lo que de continuar a ser llamado.

Notas importantes:Usted no puede acceder a las variables globales a la hora de responder este lanzamiento de código!Dependiendo de la configuración de su compilador, usted probablemente no será capaz de acceder a ciertas características de C++, como funciones virtuales (que internamente el uso de variables globales).Hay una opción que se puede establecer en Codewarrior que va a ayudar con esto, pero no estoy muy familiarizado con él.Usted debe arquitecto de su código, así que no necesita globales;por ejemplo, puede utilizar FtrSet y FtrGet para almacenar bits de datos global que podría necesitar.Finalmente, usted sólo será capaz de acceder a un solo 64KB segmento de código de 68000 código máquina.Inter-segmento de saltos no funcionan correctamente sin globals configurar.

Usted puede obtener una gran cantidad de estas restricciones por mover la mayoría de su código a un PNOlet, pero que es una forma totalmente diferente y más complicado tema.

Si quieres hacer algo más complicado de lo que podría tomar un tiempo (por ejemplo,de carga de una página web o descargar el correo electrónico), se recomienda no hacerlo durante el lanzamiento de alarma código.Se podría hacer algo en el sysAppLaunchCmdDisplayAlarm lanzamiento de código y mostrar un formulario para que el usuario que les permite cancelar.Pero esto va a ser molesto rápidamente.

Mejor para la experiencia de usuario (pero mucho más complicado) es convertirse en una aplicación de fondo.Esto es un poco de la magia negra y no se muy bien apoyado, pero es posible.Básicamente, hay tres pasos para convertirse en una aplicación de fondo:

  1. Proteger la aplicación de la base de datos utilizando DmDatabaseProtect.Esto se asegurará de que su aplicación está bloqueada por lo que no puede ser eliminado.

  2. El bloqueo de su segmento de código utilizando MemHandleLock y MemHandleSetOwner (establecer el propietario a 0).Esto se asegurará de que su código se carga en la memoria y no se moverán.

  3. Registro de algunas de las notificaciones.Por ejemplo, el sysNotifyIdleTimeEvent es un gran notificación a utilizar para hacer algún periódico de procesamiento en segundo plano.

Una vez establecido esto, puede salir de la alarma de lanzamiento de código y, a continuación, espere a que las notificaciones de fuego.Luego va a hacer todo de su procesamiento en segundo plano cuando la notificación se llama a los controladores.

También asegúrese de que si usted asigna a los objetos del sistema (memoria, las manijas, los identificadores de archivo, etc.), establezca su propietario a 0 (sistema) si usted espera que ellos persisten después de regresar de su controlador de notificación.De lo contrario el sistema se limpie.Si usted hace esto, ser super cuidadoso para evitar memoria y de recursos de las fugas!!Que nunca se te limpian cuando el propietario se establece a 0!

Para salir de modo de fondo, simplemente no a la inversa:anular el registro de las notificaciones, desbloquear el segmento de código, y desproteger su base de datos de aplicación.

Si haces cualquiera de las operaciones de red en el fondo, asegúrese de que establece la sockets en modo de no bloqueo y tratar correctamente con eso!De lo contrario se bloqueará la aplicación de primer plano y causar problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top