所謂的iOS「偽多任務」和Android的多任務處理的區別在哪?
01-06
iOS 中程序分五個狀態:活躍,不活躍(鎖屏,但程序不接受事件),運行結束,後台,掛起
特別說一下後台運行跟掛起
後台運行:是指不在界面中顯示,但是代碼還在執行掛起:程序在內存中,但是代碼不執行iOS 只允許以下幾種程序長時間在後台運行:
- Apps that play audible content to the user while in the background, such as a music player app
- Apps that keep users informed of their location at all times, such as a navigation app
- Apps that support Voice over Internet Protocol (VoIP)
- Newsstand apps that need to download and process new content
- Apps that receive regular updates from external accessories
而其他的程序最多只允許申請十分鐘的後台運行時間,十分鐘一到,就會被系統自動掛起,而在系統內存不足的情況下,才會將掛起程序 Kill 掉;這就最大程度的保證了當前活躍中的程序的系統資源,保證了其流暢性。
而 Android 的多任務則是十個程序在後台,十個程序都在執行代碼,搶佔資源參考蘋果文檔:https://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.htmlAndroid 從一開始就是允許後台,用的是 Service 這個組件,意思是就算你的屏幕上應用隱藏/被遮住,Service 依然在跑,而當內存告急的時候,系統才會通過 kill Service 釋放資源。Android 2.0 以前的 Service 有個錯誤的設計是 setforground 方法可以將 Service 設置成前台程序,導致系統就算內存告急也沒法殺掉他(前台應用是優先順序最高的),很多應用濫用這個方法,2.0 的時候這個方法砍掉了沒效果了。Service 配合上 AlarmManager 定時任務可以做到任何事情。iOS 那邊,最初的設計是這樣的,如果應用不在前台,那麼直接被系統從內存從清理出去,再進一個應用那就是等同於重啟這個應用,所以才有了 Loading Screen 這種設計,當然現在這個設計被濫用成 Splash Screen(就是應用啟動最初的那個開發商/應用的 Logo)。後來,iOS 4 開始,Apple 宣稱擁有了「多任務」,其實這個多任務只是在應用不在前台的時候依然保存在內存而已,在切回去的時候不必重新啟動一次程序,他沒法執行後台任務的。通過開放一些介面給特定的程序(音樂播放),以及推送,盡量偽造出多任務的效果。iOS 的第三方鬧鐘都是殘廢的,就是被 Apple 給限制了。
提下 WP7 得了,WP7 最初也是 iOS 那樣的,後來芒果開始,應用不在前台還是會保留在內存,不過 WP7 保留最多只有5個(或者6個,算上瓦片的話),WP7 只有下載和音樂播放是可以後台的,差不多跟 iOS 一樣。需要注意的是瓦片/列表啟動程序是直接重啟,不管這個應用有沒在內存里了,長按 Back 才是切換應用。
至於說電池問題,Galaxy Nexus 一個晚上開 Wifi 只掉 5% 的電,耗電大戶是屏幕,裝的應用200左右。iPhone4s 比 iPhone4 只變動了 CPU 就變成了電老虎……推薦閱讀:
※為什麼 Android L 不在多任務切換界面中提供「一鍵移除所有卡片」的功能?
※有 15 寸 rMBP 和 iPad 4 ,手機該選 Android 還是 iPhone?
※手機續航能力由哪些因素決定?
※安卓中有沒有可懸浮可透明的輸入法?
※作為大陸用戶,我們錯過了Android 的什麼?
TAG:iOS | Android開發 | 多任務 | Android | ApplePushNotificationService |