一窃这、運行機制的區(qū)別
1、iOS 采用的是沙盒運行機制
(1)沙盒機制
? ? ????出于安全考慮征候,iPhone對于安裝在上面的應用程序有所限制杭攻,這個限制就是應用程序只能在該程序創(chuàng)建的文件系統(tǒng)中讀取文件,不可以去其他地方訪問疤坝,此區(qū)域被稱為沙盒兆解,所以所有的非代碼文件都要保存在此,例如圖像跑揉、圖標锅睛、聲音,映像畔裕,屬性列表衣撬,文本文件等乖订“缛模總體來說沙盒就是一種獨立、安全乍构、封閉的空間甜无。
(2)沙盒機制的特點
? ? ? ? 每個應用程序都有自己的存儲空間扛点。每個應用程序都不可以翻過自己的圍墻去訪問別的存儲空間的內(nèi)容(已經(jīng)越獄的除外)。在訪問別人沙盒內(nèi)的數(shù)據(jù)時需要訪問權限岂丘。沙盒(sandbox)的核心內(nèi)容是:sandbox 對應用程序執(zhí)行各種操作的權限限制陵究。
2、Android 采用的是虛擬機運行機制
(1)什么是Dalvik虛擬機
? ? ? ? Dalvik 是 Google 公司自己設計用于 Android 平臺的 Java 虛擬機奥帘,它是 Android 平臺的重要組成部分铜邮,支持 dex 格式(Dalvik Executable )的 Java 應用程序的運行。 dex 格式是專門為 Dalvik 設計的一種壓縮格式寨蹋,適合內(nèi)存和處理器速度有限制系統(tǒng)松蒜。 Google 對其進行了特寫的優(yōu)化,使得 Dalvik 具有高效已旧、簡潔秸苗、節(jié)省資源的特點。從 Android 系統(tǒng)架構圖知运褪, Dalvik 虛擬機運行在Android的運行時庫層惊楼。
(2)Dalvik 虛擬機的功能
? ? ? ? Dalvik 作為面向 Linux、為嵌入式操作系統(tǒng)設計的虛擬機秸讹,主要負責完成對象生命周期管理檀咙、堆棧管理、線程管理璃诀、安全和異常管理攀芯,以及垃圾回收等。 Dalvik 充分利用 Linux 進程管理的特性文虏,對其進行了面向對象的設計侣诺,使得可以同時運行多個進程,而傳統(tǒng)的 Java 程序通常只能運行一個進程氧秘,這也是為什么 Android 不采用 JVM 的原因年鸳。 Dalvik 為了達到優(yōu)化的目的,底層的操作大多和系統(tǒng)內(nèi)核相關丸相,或者直接調用內(nèi)核接口搔确。另外, Dalvik 早期并沒有 JIT 編譯器灭忠,直接 Android 2.2 才加入了對 JIT 的技術支持膳算。
(3)Dalvik 虛擬機具有以下特點:
? ? ? ? 使用 dex格式的字節(jié)碼,不兼容 Java 字節(jié)碼格式
? ? ? ? 代碼密度小弛作,運行效率高涕蜂,節(jié)省資源
? ? ? ? 常量池只使用32位的索引
? ? ? ? 有內(nèi)存限制
二、兩者后臺制度不同
1映琳、iOS 采用“偽后臺”的形式
(1)iOS 系統(tǒng)的后臺機制過程
? ? ? ? 當我們程序從前臺退到后臺(按 home 鍵)后机隙,將執(zhí)行程序的委托方法蜘拉,它的主線程會被暫停。應用程序只給了我們可憐的一點點時間(也就是秒級別的)來處理東西有鹿,然后旭旭,所有的線程都被掛起了。這個時候 APP 依然駐留在內(nèi)存中葱跋,這種狀態(tài)下持寄,不調用蘋果已開放的幾種后臺方法,程序便不會運行娱俺;如果在這個時候际看,使程序繼續(xù)運行,則為后臺狀態(tài)矢否;如果當前內(nèi)存將要不夠用時仲闽,系統(tǒng)會自動把之前掛起狀態(tài)下的 APP 清出內(nèi)存。所以我們看到僵朗,有些時候打開 APP 時赖欣,還是上次退出時的那個頁面那些數(shù)據(jù),有時則是重新從閃屏進入验庙。
(2)iOS 系統(tǒng)后臺機制大概可以分為5種狀態(tài):
? ? ? ? Not Running : APP 沒有啟動顶吮,也沒有后臺運行;
? ? ? ? Active :用戶正在使用 APP粪薛,比如說我們聊微信看網(wǎng)頁的時候悴了,APP 就處于 Active 狀態(tài);
? ? ? ? Inactive :這是一個過渡的狀態(tài)违寿,APP 雖然打開了湃交,但是用戶沒有跟 APP 有任何互動操作;
? ? ? ? Background:APP 在后臺運行藤巢,微信會在沒有打開的時候接收消息搞莺;
? ? ? ? Suspended:APP 雖然在后臺運行,但是處于休眠狀態(tài)掂咒,只占用一點內(nèi)存才沧。
2、安卓中任何程序都能在后臺運行绍刮,直到?jīng)]有內(nèi)存才會關閉
(1)Android 真后臺運行機制
????????Android 上的應用是帶有獨立虛擬機的温圆,也就是每開一個應用就會打開一個獨立的虛擬機,每個 APP 都有自己的進程孩革,每個進程都有自己的內(nèi)存空間岁歉,這樣設計的原因是可以避免虛擬機崩潰導致整個系統(tǒng)崩潰,但代價就是需要更多內(nèi)存嫉戚。以上這些設計確保了 Android 的穩(wěn)定性刨裆,正常情況下最多單個程序崩潰澈圈,但整個系統(tǒng)不會崩潰彬檀。
(2)Android 的進程從高到低分為5種:
? ? ? ? 前臺進程:正在與用戶交互的進程帆啃,通俗來講就是你當前使用APP 的進程;
? ? ? ? 可見進程:可以被用戶看到窍帝,但是沒有和用戶交互努潘,例如一個 Activity 以對話框的形式覆蓋在當前 Activity 上面,當前 Activity 可以被用戶看到坤学,但是不和用戶交互疯坤;
? ? ? ? 服務進程:也就是我們常說的 Service ,能夠運行在后臺深浮,常見的有音樂類的 APP 压怠;
? ? ? ? 后臺進程:注意,這個后臺進程不要和服務器進程搞混了飞苇,它的意思是說當前 APP 在后臺運行菌瘫,例如我啟動了 APP ,然后點擊 Home 鍵返回到桌面布卡,那么這個 APP 就會被切換到后臺進程雨让;
? ? ? ? 空進程:空進程指的是在這些進程內(nèi)部,沒有任何東西在運行忿等。保留這個進程的唯一目的是用作緩存栖忠,以縮短該應用下次在其中運行組件所需的啟動時間。
三贸街、兩者最高權限指令不同
1庵寞、iOS 中用于 UI 指令權限最高。
2薛匪、Android 中數(shù)據(jù)處理指令權限最高皇帮。
四、推送機制
1蛋辈、iOS 在軟件關閉的情況下属拾,依然可以接收推送消息
? ? ? ? 手機消息當然都是通過服務器推送到我們手機上的,對于iOS 的用戶來說冷溶,蘋果有 APN 服務器來負責消息的推送渐白。當你第一次使用 APP 時,會詢問是否接收通知逞频,如果你選擇了是纯衍,那么服務器就會記錄你的 ID ,當有消息通知的時候苗胀,這些數(shù)據(jù)是先推送到蘋果的服務器中襟诸,然后通過蘋果的 APN 服務器推送到用戶手機上的瓦堵。這樣的設計讓軟件徹底關閉的時候還可以接收到消息通知,一方面釋放內(nèi)存歌亲,一方面也不會耽誤接收消息菇用。
2、Android 在軟件關閉的情況下陷揪,無法接收推送消息
? ? ? ? 對 Android 手機來說惋鸥,Google 也有類似的 GCM 服務器來推送消息,不過因為國內(nèi)的手機都沒有 Google 服務無法收到 Google GCM 服務器推送的消息悍缠。Android 的推送都是通過服務來實現(xiàn)的卦绣,就算應用沒有啟動但是服務還在一樣可以收到推送。所以只能是 Android 自己啟動 Service 來實現(xiàn)推送飞蚓,當應用殺死后 Service 如果被殺死就無法收到推送滤港。
五、渲染機制不同
Android:主線程普通優(yōu)先級——加載一個頁面趴拧,全部加載完成的同時加載當前頁面溅漾,當你看到頁面后,實際后臺仍在加載八堡,因此增加了處理器的壓力樟凄。
iOS:實時優(yōu)先級——加載整個頁面,優(yōu)先加載主屏幕顯示區(qū)域
六兄渺、開源性不同
Android:完全開源缝龄,任何開發(fā)廠商和開發(fā)者都可開發(fā)安卓的軟件,由于開源挂谍,各大品牌手機硬件差異大叔壤,導致體驗不同,兼容性不好
iOS:封閉口叙,僅蘋果擁有
七炼绘、編程語言不同:
Android:java
IOS:Objective-c
八、升級應用
Android:自動升級應用妄田,也可通過應用市場來升級
IOS:需要通過app store升級
九:軟硬件結合
Android:由于代碼開源俺亮,因此很多開發(fā)廠商都可以根據(jù)自己的設定來開發(fā)不同的手機,APP不會針對各大品牌的手機專門做優(yōu)化疟呐,因此軟硬件結合差
IOS:由于封閉脚曾,因此蘋果一家獨有專利,所有的APP都針對IOS做優(yōu)化启具,因此軟件結合較好
十本讥、應用的刪除操作不同
Android:常見的刪除某一個操作,用長按,點擊刪除或者左滑刪除
IOS:很多應用都支持左滑刪除操作
十一拷沸、獲取日志和簽名方式不同
Android:可通過adb logcat獲取日志色查,Android studio,DDMS來獲取到日志信息撞芍。簽名可以通過jarsigner -verify -certs 包名
IOS:用xcode中debug工具/Itunes高級功能查看實時log秧了,獲取簽名:解壓包取出plist文件,查看應用簽名及版本信息勤庐,并要檢查證書正確性
十二示惊、分辨率不同
Android:分辨率多達20多種
IOS:5種
十三好港、按鍵
Android:底部有3個按鍵:返回鍵愉镰、主菜單、前進鍵钧汹,在應用返回中丈探,都可通過返回鍵回退到上一步
IOS:只有home鍵,所有的應用進入只有一個入口拔莱,每個應用界面中都有返回出口
總結:
Android:開源碗降、界面好看,但安全性差塘秦、漏洞多讼渊、穩(wěn)定性差、系統(tǒng)耗電大尊剔、流量消耗大
IOS:封閉爪幻、安全規(guī)整、用戶體驗好