2010-06-09 68 views
10

自從第一次測試發佈以來,我一直在試圖找出「真正的」多任務是否可能 - 也就是說,您能否將程序放在後臺並且無限期地掛在網絡連接上?iOS 4是否向第三方開發者提供「Real Multitasking」?

例如,我正在考慮IM或IRC應用程序。我已經在iOS 4上自己編譯了一個應用程序,並且沒有改變任何東西,它似乎保持在後臺運行,但我知道它只是暫停在內存中。

文檔說最好你可以做的是請求長達10分鐘,但在開發人員的演示文稿中,他們展示了Skype坐在後臺,然後通知用戶通話正在進行。有誰知道如何確定這一切工作?

+2

我有0 iOS的經驗,所以這可能沒有幫助。但是,爲什麼不在後臺運行時做一些事情來查看它是否在運行(例如,每秒更新一次計數器)? – Cam 2010-06-09 05:22:37

+0

好主意!我現在要嘗試... – 2010-06-09 05:50:28

+0

我只是設置了一個計時器來每秒開啓並ping我的Web服務器。果然,當應用程序進入後臺時,定時器停止了觸發,即使它返回時它也會立即恢復到它暫停時的​​狀態。 – 2010-06-09 06:51:41

回答

10

看來答案是否定的。 Skype的API是一種非常特殊的情況,稱爲「voip」模式,並且需要特殊行爲,例如標記用於VoIP的套接字。

您可以在後臺接收警報通知(如時間已過)。您處於後臺運行狀態的時間量受OS嚴重限制。

Android的背景模型是完整的,在許多方面更好。

Apple有一個名爲「支持應用程序中的多任務處理」的指南,您應該可以找到它。

+9

完全可操作的背景模式對於開發人員來說更容易處理,但是對電池壽命的殘酷。這是蘋果公司在此做出的設計權衡。不要成爲蘋果的apologist,但如果你像用戶而不是開發人員那樣思考,你可以理解設計選擇。 – 2010-06-09 12:06:41

+2

我想要它作爲一個用戶。我想要適當的IRC和聊天應用程序,我希望開發人員可以自由地做他們需要做的事情來創建我想要的應用程序。也許我是一個令人討厭的用戶,並不典型,但我仍然像用戶一樣思考。 – 2010-06-09 15:36:53

+3

@pkulak,相反你想要的電池壽命只需要幾個小時就可以滿足你的需求。真正的非開發者最終用戶,需要一臺能夠持續一整天,做他們需要的電話,他們不在乎它是如何做到的。如果它看起來是做你想做的事,但卻沒有做到你認爲應該做的事,那有什麼不同。 – 2010-06-16 17:29:27

1

iOS 4應用程序可以是運行暫停。操作系統將嘗試儘可能多地在內存中保存所請求的應用程序,而所有其他應用程序都被暫停。

的應用程序,在後臺運行可以訪問這些功能的導航,音響,和VOIP(但不即時通訊)。所以看起來你可能會倒黴。

- PC World Multitasking on Apples iPhone 4

0

您可能會感興趣this blog post,它概述了「多任務」在iPhone OS 4和Android等系統中的工作原理。

+1

請注意,Android沒有相同的限制服務爲iOS。與iOS不同的是,後臺可以連續運行網絡連接服務。服務可以由應用程序(或其自身)啓動和停止,服務可以啓動意圖(比iOS更靈活)。上述通知在Android中被命名爲「廣播」,並且不需要運行服務。 – 2010-06-09 06:06:30

8

蘋果的iOS 4開發人員文檔很清楚地概述了這一點。

當你的應用程序關閉或切換離開時,它幾乎立即「掛起」,這意味着操作系統凍結了應用程序的狀態。當用戶切換回您的應用程序時,您的代碼將保持運行狀態。你不需要需要添加任何代碼到你的應用程序來做到這一點,只是編譯它對操作系統4.

以上是在大多數情況下是正確的。 「暫停」模式可能不適用的原因有兩個:

1)如果設備在內存中開始運行低電平,操作系統將開始終止暫時沒有切換的暫停應用程序,而不發出警告。這就是爲什麼你的應用程序要記住它的狀態對你最有利,所以如果你的應用程序被終止,然後重新打開,用戶並沒有真正注意,因爲它仍然返回到他們離開的地方。

2)您的應用程序使用「背景」API之一。這些用於音頻回放,VoIP服務或位置服務。在這種情況下,您的應用可以繼續在後臺運行,但只能訪問這些API。此外,您的應用可以將某些長時間運行的任務指定爲需要在應用暫停或終止之前完成的「後臺任務」,例如將圖片上傳到Flickr或渲染視頻等。

「後臺任務」方法不會無限期地檢測服務器,因爲任務有時間限制,之後它將被強制中止。與以往一樣,需要這種功能的應用程序需要實施推送通知。

這應該清除這一點。總而言之,我認爲這是一個在移動設備上進行多任務處理的非常優雅的解決方案。

1

應用程序可以請求後臺時間。閱讀文檔。我會說iOS是「受控多任務」。

1

您可以創建一個長時間運行的後臺任務,我相信這些可以包含網絡功能。只需在工作塊上設置後臺任務標誌。

https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

操作系統會限制正是你多少時間得到,雖然...它會告訴你,當你的時間到了給你一個機會來清理很好。

+0

儘管在移動到背景之前,儘可能多地進行清理是非常重要的。如果手機在內存不足的情況下運行並且不得不殺死您的應用程序,您根本沒有收到任何警告,只會被殺死。 – kubi 2010-06-26 16:10:30

1

iOS 4在某種程度上具有「真正」的多任務功能。有兩件事需要考慮:

  • UI事件循環是單一任務。所以只有前端應用程序在UI事件循環中執行。沒什麼大不了的:從UI事件循環中分離主代碼(也許你需要重新設計你的應用程序)。
  • 如果滿足一些條件(例如,低內存),操作系統「可能」終止您的應用程序。

目前這些標準之一是執行時間被限制爲10分鐘(實時不cpu時間)。不過,我希望這會改變,並看到更好的背景應用程序終止標準(我希望)。

除此之外,您可以有timers (event loops) in background

1

有一個在iOS 4.2的,甚至沒有真正的多任務處理。因爲只允許應用程序完成與狀態有關的任務,時間間隔很短,然後它將處於暫停狀態。如果您將設置後臺任務很長的時間間隔,那麼...它會表現得非常類似當您嘗試從任何地方運行應用程序時,將不會調用任何方法。

0

對於您要創建的功能集,您應該使用推送通知框架!

相關問題