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