App Extension Programming Guide-App Extension Essentials AppExtension程式設計指南:擴充套件基礎2
Understand How an App Extension Works 瞭解應用程式擴充套件的工作原理
iOS8/OS X v10.10
翻譯自蘋果官方文件 App Extension Programming Guide--App Extensions Essentials
瞭解應用程式擴充套件的工作原理
iOS8/OS X v10.10
應用程式擴充套件不是一個應用,相反,它是主體應用程式(containing app)
中一個單獨的包,並能生成單獨的二進位制檔案。與主體應用程式不同,應用擴充套件實現的是一個特定的、狹義範圍內的任務,並且要嚴格遵循擴充套件點的協議。
應用程式擴充套件的生命週期
因為一個應用程式擴充套件不是一個應用,所以它的生命週期和執行環境也不同於應用。一般情況來說,應用程式擴充套件的生命週期始於使用者從某個應用中啟動它。允許使用者選擇某一種擴充套件來幫助他們執行某項任務的應用,我們稱之為擴充套件的載體應用(host app)
。載體應用(host app)
定義了啟用擴充套件的上下文環境,並在其傳送請求以響應使用者操作時開始擴充套件的生命週期。當應用擴充套件完成載體應用傳送的請求任務後,該擴充套件的生命週期也隨之結束。
比如說,假定這樣一個場景,使用者在擴充套件載體應用(host app)
中選中一段文字,點選分享按鈕,並從分享列表中選擇某一個分享擴充套件,將選中的內容分享至社交網站。此時,載體應用就會向擴充套件傳送一個包含使用者所選文字的請求,啟動該擴充套件,從而去響應使用者的請求,即分享所選文字的內容。應用擴充套件基本的生命週期歸納在下圖2-1中。
在圖2-1中的第2步中,系統例項化載體應用請求中確定的擴充套件,並在兩者之間建立通訊通道。然後擴充套件在載體應用的上下文場景中顯示相關介面,並使用其在載體應用請求中接收到的專案來執行任務(在上述的例子中,擴充套件接收到的專案是使用者選中的文字)
在圖2-1的第3步中,使用者在擴充套件中執行或取消某個任務,或者直接可以忽略該擴充套件。在對使用者的操作做出響應的過程中,擴充套件會根據載體應用的請求立即開始執行任務,但如果有特殊需要時,擴充套件也會在系統後臺執行任務,這種情況下,載體不會顯示擴充套件相關介面,並且使用者返回到其先前在載體應用中的上下文環境。當應用擴充套件執行完任務後,不管是立刻返回還是延遲返回,但最後其執行結果都會返回給載體應用。
當擴充套件開始執行任務之後(或者開始在系統後臺執行任務),系統就會終止擴充套件,比如圖2-1中的第4步。
應用擴充套件是如何進行通訊的
當應用擴充套件在執行的時候,它只會直接和載體應用(host app)
進行通訊,而擴充套件和主體應用containing app
之間不會直接通訊。在擴充套件執行的過程中,主體應用(containing app)
甚至都不執行。另外,載體應用(host app)
和主體應用(containing app)
之間也不會進行通訊。圖2-2中描述了執行中的應用擴充套件
、載體應用(host app)
以及主體應用(containing app)
這三者之間的關係。
當一個擴充套件需要和主體應用containing app進行通訊時,只能在載體應用確定的上下文環境中進行間接通訊。比如,一個應用擴充套件有可能會執行呼叫它的應用程式。在這個例子中,擴充套件使用了不能與 containing app 傳遞訊息的API。此外,應用擴充套件與其 containing app 可以在一個定義為私有的共享容器中訪問資料。圖2-3描述了擴充套件和 containing app 之間的間接通訊型別。
注意:在底層,系統使用程式間通訊來確保應用擴充套件和擴充套件載體應用共同來開啟無縫結合體驗。在你的程式碼中,你無需考慮這些底層的通訊機制,因為你使用的是擴充套件點和系統提供的高階API。