• 2

關於iPhone OS 4.0 的multitasking

香港一個 Blogger的見解: Link

內容大意是說 iPhone OS 4.0 的多工嚴格來說並非真正意義上的多工, 而只是把原有的服務優化再包裝~

(其中牽涉到一些技術性問題, 最好請稍移玉步到作者原文觀看)

No offense, 只是覺得作者觀察分析得很好, 所以想分享之~
2010-04-11 16:15 發佈
嗯...不知道作者是否實在的去看了相關api的運作,
來解釋4.0的multitasking,.
我是很懷疑啦~

不過, 那不是很重要,
重點是消費者想要的,
apple和第三方開發者可以做的出來才是重點~~
只要能讓使用者方便使用,電量不會消耗太快,系統又穩定,真多工與假多工根本不是重點。
那是程式開發者才要去注意的地方,使用者只要開心的使用手機就好了。
這也是Apple 希望做到的方式。
===我是海賊王迷!!!===
wildcat wrote:
嗯...不知道作者是...(恕刪)


這位作者本身對程式設計等理解也是很深的~可以看看他其他文章也很有技術性, 起碼不是純嘴炮的:P

jimmyjinn wrote:
只要能讓使用者方便使...(恕刪)


對, 所以作者也說, 這算是一種聰明的多工吧! 從簡單易用的角度來說, Apple真的很出色~
看來只有 JB 後的多工才是真的多工, 但非常耗電 (實測的結論).
本來 iPhone 就是多工囉…

(基本上,只要有跑 OS 的系統,都一定是多工的了… 要不一顆 CPU,就是只能跑一個程式… 一顆 CPU,跑 OS + 應用程式 這樣多個程式,就一定要用到多工 / time-sharing 的觀念了)

---

至於多工的限制多還少,就是看 OS 設計者對它的 scheduler 的設計限制… (現行的 iPhone,可多工進行的,只有本身系統的程式… 3rd party 的,就是需要被 swap out / 中止,OS 才會 重現 主畫面,讓你另選別的程式…

所以 OS 本身是多工 OS 沒錯,但實際上只讓你同時開一個應用程式…

至於是否要完全開放應用程式多工,我覺得不是重點… 重點還是使用者用起來的 "experience" 是怎樣才重要…

就像是 blog 裡面的人說的,玩 game 打怪,也許你就是想要說突然需要接電話時,你的 game 就應先被 OS scheduler "暫停",而不要再呆呆的一直跑,讓你被怪打死才對…

而像是大家都想要的背景音樂,要是可以透過特定的 "service",把功能作出來給使用者用… 是不是真的全面開放 多工 功能,重要性不是那麼重要… (你只要聽到音樂就好… 管它後面是不是一個程式在那吃電放音樂,還是 OS 的一個代理 service 在幫程式放的)

這事實上是 apple 的原則吧… 設計是以 "使用者" 為中心… 使用者要的功能作到就好… 而不是以 "Developer" 為中心… 把 "Developer" 想要的自由性全給出來…

而太全部多工,很自然的,每個在跑的程式用到的 CPU 時間會變少,效能會變差… (當然,你可以說,這是使用者自已要選擇,不要一次跑那麼多程式… 但這對使用者為中心的 Apple 來說,這是不可接受的… Apple 的看法就是:使用者本來就不應還要了解說 "跑太多程式會變慢" 這類的雜事… )

MBAnon wrote:
這事實上是 apple 的原則吧… 設計是以 "使用者" 為中心… 使用者要的功能作到就好… 而不是以 "Developer" 為中心… 把 "Developer" 想要的自由性全給出來…

而太全部多工,很自然的,每個在跑的程式用到的 CPU 時間會變少,效能會變差… (當然,你可以說,這是使用者自已要選擇,不要一次跑那麼多程式… 但這對使用者為中心的 Apple 來說,這是不可接受的… Apple 的看法就是:使用者本來就不應還要了解說 "跑太多程式會變慢" 這類的雜事…


這個說得真好
現在一堆人說 Apple 怎麼不開放這個,不開放那個
但是都沒有看看消費者懂不懂開放這個的好處

有人說可以開放 Flash ,但在執行之前提示「是/否/離開」
我就不認為有很廣大的消費者了解什麼叫 Flash
那自然直覺反應就是按下是,因為消費者的最終目的是要執行 App
結果手機變慢, 那直覺就會認定是 Apple 製造的問題

大多數人喜歡 iPhone 主要因素就是操作順暢
操作不順暢的時候,手機直接就不買啦,誰還管你開放了什麼東西,又支援什麼?
zeoszeho wrote:
香港一個 Blogg...(恕刪)

在iPhone Application Programming Guide 中有一章講到 Executing Code in the Background ,
詳細看完內容後發現,作者應該是誤會了,但他舉的Street Fighter Game 例子,恰好是不被允許的狀況,
一旦app在背景執行時,呼叫 OpenGL動畫函式庫,該app會馬上被中止執行;
Applications running in the background are more limited in what they can do than a foreground application. Although the window and view objects of a background application still exist in memory, they are not displayed on screen.

Do not make any OpenGL ES calls from your code. You must not create an EAGLContext object or issue any OpenGL ES drawing commands of any kind. Using these calls will cause your application to be terminated immediately.

除此之外,app經由使用apple提供的api是可以在背景執行特定程序,
當app於背景執行時,可以改變app畫面上Label的文字或位置,但不鼓勵這麼做,就像Street Fighter打到一半跑去接電話,
而讓電動繼續跑也是沒必要是一樣的道理.
也就是說app想要在移入背景時做些運算是能夠辦到的,但要由 Programmer 特別指定,
如果以上我的理解沒錯,與其說它是虛假的多工,不如說它是負責任的多工;
對於電源有限的手機而言,Programmer在撰寫程式時,是應該對這個限制因素承擔一點責任.
http://mizsoftware.blogspot.com/
mizyeh wrote:
在iPhone Ap...(恕刪)


原來如此! 受教了~ 畢竟我也不會寫程式, 只是有點概念~ 但感覺Apple在著重user experience這點上限制部分功能還是很有道理的

看了各位技術性的分析與解說後
小弟我也只能 領略皮毛而已

而這也代表 有更廣大的使用者跟我一樣
要的只是蘋果 做出來而已 讓我們開心使用就夠了
這就是他厲害地方

不過我好奇的是 相較蘋果的所謂假多工
wm 或是 股溝系統 在執行多工時
程式在run的方式 是否有所不同? 或是說wm難道就是真多工?
  • 2
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?