2008-09-10 65 views
4

我正在嘗試創建一個Palm OS應用程序,每隔X分鐘或幾小時檢查一次網站,並在有數據可用時提供通知。我知道這種事情可以在新的Palm上完成 - 例如,當應用不在最前面時,我的Centro可以下載電子郵件或網站 - 但我不知道該怎麼做。任何人都可以將我指向正確的方向嗎?Palm OS中的「背景」任務

回答

7

這是可能的,但非常困難。有幾個步驟你必須採取。

首先,這隻適用於Palm OS 5,並且在一些早期的Palm OS 5設備上粗略。最新的設備更好,但不完美。

接下來,您將需要使用AlmSetAlarm爲您的應用程序創建警報。這就是你如何完成「每X分鐘或幾小時」的部分。

當警報觸發時,即使應用程序尚未運行,您的應用程序也會得到一個sysAppLaunchCmdAlarmTriggered啓動代碼。如果你只想做一些簡單而快速的事情,你可以響應啓動代碼來完成,你就完成了。

當你在警報啓動代碼中做了你的東西后,一定要設置下一個警報,以便繼續調用。

重要注意事項:響應此啓動代碼時無法訪問全局變量!根據編譯器的設置,您可能也無法訪問某些C++功能,如虛擬功能(內部使用全局變量)。你可以在Codewarrior中設置一個設置來幫助解決這個問題,但我並不太熟悉它。你應該構建你的代碼,以便它不需要全局變量;例如,您可以使用FtrSet和FtrGet來存儲您可能需要的全局數據位。最後,您將只能訪問68000個機器碼的單個64KB代碼段。沒有全局設置,段間跳轉無法正常工作。

通過將大部分代碼移動到PNOlet,您可以解決很多這些限制,但這是一個完全不同且更復雜的主題。

如果您想做一些更復雜的事情,可能需要一段時間(例如,加載網頁或下載電子郵件),強烈建議您不要在警報啓動代碼中執行此操作。您可以在sysAppLaunchCmdDisplayAlarm啓動代碼中執行一些操作,並向用戶顯示允許它們取消的表單。但這一定會很快令人討厭。

更好的用戶體驗(但更復雜)是成爲後臺應用程序。這有些黑魔法,並沒有得到很好的支持,但它是可能的。基本上有三個步驟成爲一個後臺應用程序:

  1. 使用DmDatabaseProtect保護您的應用程序數據庫。這將確保您的應用程序被鎖定,因此無法刪除。

  2. 使用MemHandleLock和MemHandleSetOwner(將所有者設置爲0)鎖定您的代碼段。這將確保您的代碼被加載到內存中,並且不會被移動。

  3. 註冊一些通知。例如,sysNotifyIdleTimeEvent是一個很棒的通知,用於執行一些週期性的後臺處理。

設置完成後,您可以退出警報啓動代碼,然後等待通知啓動。當您的通知處理程序被調用時,您將完成所有後臺處理。

還要確保如果您分配任何系統對象(內存,句柄,文件句柄等),你如果你希望他們從您的通知處理程序返回後,堅持設置其所有者爲0(系統)。否則系統會清理它們。如果你這樣做,要非常小心,以避免內存和資源泄漏!當主人設置爲0時,他們永遠不會清理乾淨!

要退出背景模式,簡單地做反向:取消註冊通知,解除您的代碼段,並取消保護您的應用程序數據庫。

如果您在後臺做任何網絡操作,確保您設置的套接字非阻塞模式,並與正確處理!否則,您將阻止前臺應用程序並導致問題。

+0

您好添,很高興在這裏見到你!我喜歡PocketTunes。榮譽! – prakash 2008-09-11 05:13:40