我正在尝试创建一个Palm OS应用程序,每X分钟或几个小时检查一次网站,并在有数据可用时提供通知。我知道这种事情可以在新的Palm上做--例如,我的Centro可以在应用程序不在顶部时下载电子邮件或网站-但我不知道怎么做。有谁能给我指个方向吗?
发布于 2008-09-11 04:37:40
这是可以做到的,但非常困难。有几个步骤你必须采取。
首先,这只适用于PalmOS5,在一些早期的PalmOS5设备上还不够完善。最新的设备更好,但并不完美。
接下来,您需要使用AlmSetAlarm为您的应用程序创建一个警报。这就是如何完成“每X分钟或每小时”部分。
当警报触发时,您的应用程序将获得一个sysAppLaunchCmdAlarmTriggered启动代码,即使它尚未运行。如果你只想做一些简单而快速的事情,你可以响应启动代码来做,你就完成了。
在完成警报启动代码后,请确保设置下一个警报,以便继续呼叫您。
重要提示:响应此启动代码时不能访问全局变量!根据编译器中的设置,您可能还无法访问某些C++特性,比如虚函数(在内部使用全局变量)。你可以在Codewarrior中设置一个设置来帮助你做到这一点,但我不太熟悉它。您应该设计代码,使其不需要全局变量;例如,您可以使用FtrSet和FtrGet来存储您可能需要的一些全局数据。最后,您将只能访问包含68000个机器代码的单个64KB代码段。如果不设置全局变量,段间跳转将无法正常工作。
您可以通过将大部分代码移到PNOlet来绕过许多这些限制,但这是一个完全不同且更复杂的主题。
如果您想做一些可能需要一段时间的更复杂的事情(例如加载网页或下载电子邮件),强烈建议您不要在警报启动代码期间执行此操作。您可以在sysAppLaunchCmdDisplayAlarm启动代码中执行一些操作,并向用户显示一个允许他们取消的表单。但这肯定会很快让人恼火。
更好的用户体验(但要复杂得多)是成为后台应用程序。这有点像黑魔法,并没有得到很好的支持,但它是可能的。要成为一个后台应用程序,基本上需要三个步骤:
设置完成后,您可以退出警报启动代码,然后等待您的通知触发。然后,您将在调用通知处理程序时执行所有后台处理。
还要确保在分配任何系统对象(内存、句柄、文件句柄等)时,如果希望它们在从通知处理程序返回后保持不变,则将它们的所有者设置为0(系统)。否则系统会清理掉它们。如果这样做,一定要格外小心,以避免内存和资源泄漏!当所有者设置为0时,它们永远不会被清除!
要退出后台模式,只需执行相反的操作:注销通知,解锁您的代码段,并取消对应用程序数据库的保护。
如果您在后台执行任何网络操作,请确保将套接字设置为非阻塞模式并正确处理!否则会阻塞前台应用,造成问题。
https://stackoverflow.com/questions/55350
复制相似问题