首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >palm OS中的“后台”任务

palm OS中的“后台”任务
EN

Stack Overflow用户
提问于 2008-09-10 21:19:39
回答 1查看 382关注 0票数 4

我正在尝试创建一个Palm OS应用程序,每X分钟或几个小时检查一次网站,并在有数据可用时提供通知。我知道这种事情可以在新的Palm上做--例如,我的Centro可以在应用程序不在顶部时下载电子邮件或网站-但我不知道怎么做。有谁能给我指个方向吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-09-11 04:37:40

这是可以做到的,但非常困难。有几个步骤你必须采取。

首先,这只适用于PalmOS5,在一些早期的PalmOS5设备上还不够完善。最新的设备更好,但并不完美。

接下来,您需要使用AlmSetAlarm为您的应用程序创建一个警报。这就是如何完成“每X分钟或每小时”部分。

当警报触发时,您的应用程序将获得一个sysAppLaunchCmdAlarmTriggered启动代码,即使它尚未运行。如果你只想做一些简单而快速的事情,你可以响应启动代码来做,你就完成了。

在完成警报启动代码后,请确保设置下一个警报,以便继续呼叫您。

重要提示:响应此启动代码时不能访问全局变量!根据编译器中的设置,您可能还无法访问某些C++特性,比如虚函数(在内部使用全局变量)。你可以在Codewarrior中设置一个设置来帮助你做到这一点,但我不太熟悉它。您应该设计代码,使其不需要全局变量;例如,您可以使用FtrSet和FtrGet来存储您可能需要的一些全局数据。最后,您将只能访问包含68000个机器代码的单个64KB代码段。如果不设置全局变量,段间跳转将无法正常工作。

您可以通过将大部分代码移到PNOlet来绕过许多这些限制,但这是一个完全不同且更复杂的主题。

如果您想做一些可能需要一段时间的更复杂的事情(例如加载网页或下载电子邮件),强烈建议您不要在警报启动代码期间执行此操作。您可以在sysAppLaunchCmdDisplayAlarm启动代码中执行一些操作,并向用户显示一个允许他们取消的表单。但这肯定会很快让人恼火。

更好的用户体验(但要复杂得多)是成为后台应用程序。这有点像黑魔法,并没有得到很好的支持,但它是可能的。要成为一个后台应用程序,基本上需要三个步骤:

  1. 使用DmDatabaseProtect保护您的应用程序数据库。这将确保您的应用程序被锁定,因此无法删除。
  2. 使用MemHandleLock和MemHandleSetOwner锁定您的代码段(将所有者设置为0)。这将确保您的代码已加载到内存中,并且不会对某些通知执行moved.
  3. Register。例如,sysNotifyIdleTimeEvent是一个很好的通知,可以用来进行一些周期性的后台处理。

设置完成后,您可以退出警报启动代码,然后等待您的通知触发。然后,您将在调用通知处理程序时执行所有后台处理。

还要确保在分配任何系统对象(内存、句柄、文件句柄等)时,如果希望它们在从通知处理程序返回后保持不变,则将它们的所有者设置为0(系统)。否则系统会清理掉它们。如果这样做,一定要格外小心,以避免内存和资源泄漏!当所有者设置为0时,它们永远不会被清除!

要退出后台模式,只需执行相反的操作:注销通知,解锁您的代码段,并取消对应用程序数据库的保护。

如果您在后台执行任何网络操作,请确保将套接字设置为非阻塞模式并正确处理!否则会阻塞前台应用,造成问题。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档