watchOS 3的新功能 後台任務

2021-10-07 10:45:21 字數 3748 閱讀 4828

在本教程中,我將向您展示如何在watchos 3中利用新的watchkit api使自己的應用程式使用這些新的後台任務。 重要的是要注意,即使您的應用程式設定正確以支援這些後台重新整理,根據特定使用者的配置,系統也可能不會允許您的應用程式在後台執行。

本教程要求您在os x el capitan或更高版本上執行xcode 8。

watchos 3中的第乙個重要的新類是wkrefreshbackgroundtask類。 這是乙個抽象類,您不應繼承其子類或建立自己的例項。 它僅定義乙個屬性userinfo,它可以儲存與後台任務有關的額外資訊。 它還定義了乙個方法settaskcompleted(),您必須呼叫該方法以告訴系統任務已完成。 如果您不撥打**,那麼系統將在應用程式上花費最大的時間來嘗試完成任務,從而浪費電池並損害其他應用程式的效能。

當您的應用程式應處理正在完成的後台任務時,系統將呼叫watchos擴充套件委託的handle(_:)方法。 該方法的單個引數是一組wkrefreshbackgroundtask物件,您需要對其進行迴圈並進行相應的處理。

wksnapshotrefreshbackgroundtask是一種任務型別,專門用於您的應用程式需要更新其快照時。 我們將在本教程的後面部分討論快照。 您現在只需要知道乙個應用程式的快照用作其啟動映像,並且也可以在使用者的​​擴充套件塢中顯示(可通過按側面按鈕進行訪問)。 請注意,這種型別的後台任務具有獨特的任務完成方法,我們稍後還將討論。

wkwatchconnectivityrefreshbackgroundtask是一種任務型別,用於當您通過watchconnectivity框架將資料從iphone傳輸到手錶時。 由於此框架提供了一種將複雜資料直接傳輸到手錶的方法,因此,該相應的後台任務型別主要用於計畫快照更新,以響應從iphone接收到的資料。

wkurlsessionrefreshbackgroundtask是後台聯網任務完成後分配給擴充套件委託的任務型別。 在這種情況下,仍將呼叫為urlsession物件設定的委託方法,在這裡需要適當地處理資料。 僅呼叫擴充套件委託的handle(_:)方法,以便您的應用程式可以響應網路操作完成。wkurlsessionrefreshbackgroundtask不允許您訪問urlsession物件或已傳輸的資料。 它定義的唯一額外屬性是乙個稱為sessionidentifier的字串,您可以使用它來確定已完成的網路過程。

您可以通過多種方式在watchos 3中安排後台重新整理。對於簡單的應用程式或快照重新整理,可以在任何wkextension物件上使用以下兩種方法。

schedulebackgroundrefresh(withpreferreddate:userinfo:scheduledcompletion:)

請注意,不能保證您在此準確時間在後台喚醒您的應用程式。 由於其他情況(例如,電池剩餘電量,正在執行的其他應用程式以及正在執行的記憶體等),系統可能決定稍後再喚醒您的應用程式。

可通過傳遞給擴充套件委託的任何後台任務物件訪問userinfo引數。 如果您只需要傳送與當前重新整理有關的資訊,這將特別有用。 最後,scheduledcompletion引數可以提供乙個**塊,該**塊將在計畫了重新整理或由於某些錯誤而失敗後執行。

schedulesnapshotrefresh(withpreferreddate:userinfo:scheduledcompletion:)

此方法將wksnapshotrefreshbackgroundtask物件返回到您的擴充套件委託。 此方法的引數與計畫常規應用程式重新整理時的引數相同。 此方法的唯一區別是您計畫的重新整理型別。

以下是一段示例**,可在watchos應用程式中的任何地方使用它來安排後台重新整理:

wkextension.shared().schedulebackgroundrefresh(withpreferreddate: date(timeintervalsincenow: 60 * 60), userinfo: nil) 

}

如前所述,將建立wkwatchconnectivityrefreshbackgroundtask來響應您通過watchconnectivity api從配對的iphone向手錶傳送資料的情況。

如果您的應用程式已放置在使用者的擴充套件塢中,則您有責任使擴充套件塢中顯示的可見「快照」保持最新狀態。

當您需要通過將wksnapshotbackgroundrefreshtask傳遞到擴充套件委託的handle(_:)方法中來更新快照時,會通知您的應用程式。 收到此通知時,除了在後台喚醒watchkit擴充套件程式外,還在後台和螢幕外喚醒應用程式的根介面控制器。 在此過程中,將按此順序呼叫以下方法:

根介面控制器的awake(withcontext:)方法

根介面控制器的willactivate()方法

擴充套件委託的handle(_:)方法

在這三種方法中的任何時候,您都可以自定義應用程式介面的外觀,以建立顯示在擴充套件塢中的快照。

重新整理快照的最後一步發生在擴充套件委託的handle(_:)方法中。 與其他後台任務型別一樣,您必須告訴系統任務已完成。 但是,對於快照重新整理,可以通過在wksnapshotbackgroundrefreshtask物件上呼叫settaskcompleted(restoreddefaultstate:estimatedsnapshotexpiration:userinfo:)方法來wksnapshotbackgroundrefreshtask。 呼叫此方法後,watchos會捕獲應用程式當前介面的快照,並將其保留在記憶體中,直到下次重新整理。 為了更好地理解此方法,讓我們遍歷其所有引數:

watchos 2和ios 9中引入的watchconnectivity框架也通過watchos 3和ios 10獲得了一些新功能。

如果使用者將應用程式的複雜功能放在表盤上,則一天之內最多可以將資料從手機傳輸到手錶上50次。 就像在ios 9和watchos 2中一樣,這是通過wcsessiontransfercurrentcomplication(userinfo:)例項方法完成的。 新的watchos 3和ios 10是wcsessionremainingcomplicationuserinfotransfers屬性,它會告訴你有多少轉賬剩餘的那一天。

鏈結的github儲存庫包含乙個watchos 3 xcode專案,其中包含一些示例**,這些示例**展示了如何在自己的應用程式中計畫和響應後台重新整理。

翻譯自:

freecms後台新功能的新增

freecms新增後台功能的步驟無非就是資料庫和業務邏輯 資料庫這塊的步聚簡要說一下,1.建資料庫 業務邏輯不再多說,多種多樣,分清servlet和action的生存週期即可 然後就是後台管理頁面的新增,這個freecms二次開發文件中已經寫清了,按他的教程來。然後想在左側顯示,需要往freecms...

ecshop後台新功能許可權的新增

1 在後台 推薦管理 裡新增 推薦人分成 會員分成 兩個操作功能以及許可權 index.php?act menu incluedes inc priv.php 許可權對照表 inc menu.php 管理中心選單陣列 languages zh cn admin common.php 管理中心公共語言...

ecshop後台新功能許可權的新增

1 在後台 推薦管理 裡新增 推薦人分成 會員分成 兩個操作功能以及許可權 index.php?act menu incluedes inc priv.php 許可權對照表 inc menu.php 管理中心選單陣列 languages zh cn admin common.php 管理中心公共語言...