作為測(cè)試你不可不知的 iOS 與 Android 差異點(diǎn)!

一、運(yùn)行機(jī)制的區(qū)別

1、iOS 采用的是沙盒運(yùn)行機(jī)制

(1)沙盒機(jī)制

? ? ????出于安全考慮,iPhone對(duì)于安裝在上面的應(yīng)用程序有所限制,這個(gè)限制就是應(yīng)用程序只能在該程序創(chuàng)建的文件系統(tǒng)中讀取文件,不可以去其他地方訪問,此區(qū)域被稱為沙盒,所以所有的非代碼文件都要保存在此,例如圖像、圖標(biāo)、聲音,映像,屬性列表,文本文件等??傮w來說沙盒就是一種獨(dú)立、安全、封閉的空間。

(2)沙盒機(jī)制的特點(diǎn)

? ? ? ? 每個(gè)應(yīng)用程序都有自己的存儲(chǔ)空間。每個(gè)應(yīng)用程序都不可以翻過自己的圍墻去訪問別的存儲(chǔ)空間的內(nèi)容(已經(jīng)越獄的除外)。在訪問別人沙盒內(nèi)的數(shù)據(jù)時(shí)需要訪問權(quán)限。沙盒(sandbox)的核心內(nèi)容是:sandbox 對(duì)應(yīng)用程序執(zhí)行各種操作的權(quán)限限制。

2、Android 采用的是虛擬機(jī)運(yùn)行機(jī)制

(1)什么是Dalvik虛擬機(jī)

? ? ? ? Dalvik 是 Google 公司自己設(shè)計(jì)用于 Android 平臺(tái)的 Java 虛擬機(jī),它是 Android 平臺(tái)的重要組成部分,支持 dex 格式(Dalvik Executable )的 Java 應(yīng)用程序的運(yùn)行。 dex 格式是專門為 Dalvik 設(shè)計(jì)的一種壓縮格式,適合內(nèi)存和處理器速度有限制系統(tǒng)。 Google 對(duì)其進(jìn)行了特寫的優(yōu)化,使得 Dalvik 具有高效、簡(jiǎn)潔、節(jié)省資源的特點(diǎn)。從 Android 系統(tǒng)架構(gòu)圖知, Dalvik 虛擬機(jī)運(yùn)行在Android的運(yùn)行時(shí)庫(kù)層。

(2)Dalvik 虛擬機(jī)的功能

? ? ? ? Dalvik 作為面向 Linux、為嵌入式操作系統(tǒng)設(shè)計(jì)的虛擬機(jī),主要負(fù)責(zé)完成對(duì)象生命周期管理、堆棧管理、線程管理、安全和異常管理,以及垃圾回收等。 Dalvik 充分利用 Linux 進(jìn)程管理的特性,對(duì)其進(jìn)行了面向?qū)ο蟮脑O(shè)計(jì),使得可以同時(shí)運(yùn)行多個(gè)進(jìn)程,而傳統(tǒng)的 Java 程序通常只能運(yùn)行一個(gè)進(jìn)程,這也是為什么 Android 不采用 JVM 的原因。 Dalvik 為了達(dá)到優(yōu)化的目的,底層的操作大多和系統(tǒng)內(nèi)核相關(guān),或者直接調(diào)用內(nèi)核接口。另外, Dalvik 早期并沒有 JIT 編譯器,直接 Android 2.2 才加入了對(duì) JIT 的技術(shù)支持。

(3)Dalvik 虛擬機(jī)具有以下特點(diǎn):

? ? ? ? 使用 dex格式的字節(jié)碼,不兼容 Java 字節(jié)碼格式

? ? ? ? 代碼密度小,運(yùn)行效率高,節(jié)省資源

? ? ? ? 常量池只使用32位的索引

? ? ? ? 有內(nèi)存限制

二、兩者后臺(tái)制度不同

1、iOS 采用“偽后臺(tái)”的形式

(1)iOS 系統(tǒng)的后臺(tái)機(jī)制過程

? ? ? ? 當(dāng)我們程序從前臺(tái)退到后臺(tái)(按 home 鍵)后,將執(zhí)行程序的委托方法,它的主線程會(huì)被暫停。應(yīng)用程序只給了我們可憐的一點(diǎn)點(diǎn)時(shí)間(也就是秒級(jí)別的)來處理東西,然后,所有的線程都被掛起了。這個(gè)時(shí)候 APP 依然駐留在內(nèi)存中,這種狀態(tài)下,不調(diào)用蘋果已開放的幾種后臺(tái)方法,程序便不會(huì)運(yùn)行;如果在這個(gè)時(shí)候,使程序繼續(xù)運(yùn)行,則為后臺(tái)狀態(tài);如果當(dāng)前內(nèi)存將要不夠用時(shí),系統(tǒng)會(huì)自動(dòng)把之前掛起狀態(tài)下的 APP 清出內(nèi)存。所以我們看到,有些時(shí)候打開 APP 時(shí),還是上次退出時(shí)的那個(gè)頁(yè)面那些數(shù)據(jù),有時(shí)則是重新從閃屏進(jìn)入。

(2)iOS 系統(tǒng)后臺(tái)機(jī)制大概可以分為5種狀態(tài):

? ? ? ? Not Running : APP 沒有啟動(dòng),也沒有后臺(tái)運(yùn)行;

? ? ? ? Active :用戶正在使用 APP,比如說我們聊微信看網(wǎng)頁(yè)的時(shí)候,APP 就處于 Active 狀態(tài);

? ? ? ? Inactive :這是一個(gè)過渡的狀態(tài),APP 雖然打開了,但是用戶沒有跟 APP 有任何互動(dòng)操作;

? ? ? ? Background:APP 在后臺(tái)運(yùn)行,微信會(huì)在沒有打開的時(shí)候接收消息;

? ? ? ? Suspended:APP 雖然在后臺(tái)運(yùn)行,但是處于休眠狀態(tài),只占用一點(diǎn)內(nèi)存。

2、安卓中任何程序都能在后臺(tái)運(yùn)行,直到?jīng)]有內(nèi)存才會(huì)關(guān)閉

(1)Android 真后臺(tái)運(yùn)行機(jī)制

????????Android 上的應(yīng)用是帶有獨(dú)立虛擬機(jī)的,也就是每開一個(gè)應(yīng)用就會(huì)打開一個(gè)獨(dú)立的虛擬機(jī),每個(gè) APP 都有自己的進(jìn)程,每個(gè)進(jìn)程都有自己的內(nèi)存空間,這樣設(shè)計(jì)的原因是可以避免虛擬機(jī)崩潰導(dǎo)致整個(gè)系統(tǒng)崩潰,但代價(jià)就是需要更多內(nèi)存。以上這些設(shè)計(jì)確保了 Android 的穩(wěn)定性,正常情況下最多單個(gè)程序崩潰,但整個(gè)系統(tǒng)不會(huì)崩潰。

(2)Android 的進(jìn)程從高到低分為5種:

? ? ? ? 前臺(tái)進(jìn)程:正在與用戶交互的進(jìn)程,通俗來講就是你當(dāng)前使用APP 的進(jìn)程;

? ? ? ? 可見進(jìn)程:可以被用戶看到,但是沒有和用戶交互,例如一個(gè) Activity 以對(duì)話框的形式覆蓋在當(dāng)前 Activity 上面,當(dāng)前 Activity 可以被用戶看到,但是不和用戶交互;

? ? ? ? 服務(wù)進(jìn)程:也就是我們常說的 Service ,能夠運(yùn)行在后臺(tái),常見的有音樂類的 APP ;

? ? ? ? 后臺(tái)進(jìn)程:注意,這個(gè)后臺(tái)進(jìn)程不要和服務(wù)器進(jìn)程搞混了,它的意思是說當(dāng)前 APP 在后臺(tái)運(yùn)行,例如我啟動(dòng)了 APP ,然后點(diǎn)擊 Home 鍵返回到桌面,那么這個(gè) APP 就會(huì)被切換到后臺(tái)進(jìn)程;

? ? ? ? 空進(jìn)程:空進(jìn)程指的是在這些進(jìn)程內(nèi)部,沒有任何東西在運(yùn)行。保留這個(gè)進(jìn)程的唯一目的是用作緩存,以縮短該應(yīng)用下次在其中運(yùn)行組件所需的啟動(dòng)時(shí)間。

三、兩者最高權(quán)限指令不同

1、iOS 中用于 UI 指令權(quán)限最高。

2、Android 中數(shù)據(jù)處理指令權(quán)限最高。

四、推送機(jī)制

1、iOS 在軟件關(guān)閉的情況下,依然可以接收推送消息

? ? ? ? 手機(jī)消息當(dāng)然都是通過服務(wù)器推送到我們手機(jī)上的,對(duì)于iOS 的用戶來說,蘋果有 APN 服務(wù)器來負(fù)責(zé)消息的推送。當(dāng)你第一次使用 APP 時(shí),會(huì)詢問是否接收通知,如果你選擇了是,那么服務(wù)器就會(huì)記錄你的 ID ,當(dāng)有消息通知的時(shí)候,這些數(shù)據(jù)是先推送到蘋果的服務(wù)器中,然后通過蘋果的 APN 服務(wù)器推送到用戶手機(jī)上的。這樣的設(shè)計(jì)讓軟件徹底關(guān)閉的時(shí)候還可以接收到消息通知,一方面釋放內(nèi)存,一方面也不會(huì)耽誤接收消息。

2、Android 在軟件關(guān)閉的情況下,無法接收推送消息

? ? ? ? 對(duì) Android 手機(jī)來說,Google 也有類似的 GCM 服務(wù)器來推送消息,不過因?yàn)閲?guó)內(nèi)的手機(jī)都沒有 Google 服務(wù)無法收到 Google GCM 服務(wù)器推送的消息。Android 的推送都是通過服務(wù)來實(shí)現(xiàn)的,就算應(yīng)用沒有啟動(dòng)但是服務(wù)還在一樣可以收到推送。所以只能是 Android 自己?jiǎn)?dòng) Service 來實(shí)現(xiàn)推送,當(dāng)應(yīng)用殺死后 Service 如果被殺死就無法收到推送。

五、渲染機(jī)制不同

Android:主線程普通優(yōu)先級(jí)——加載一個(gè)頁(yè)面,全部加載完成的同時(shí)加載當(dāng)前頁(yè)面,當(dāng)你看到頁(yè)面后,實(shí)際后臺(tái)仍在加載,因此增加了處理器的壓力。

iOS:實(shí)時(shí)優(yōu)先級(jí)——加載整個(gè)頁(yè)面,優(yōu)先加載主屏幕顯示區(qū)域

六、開源性不同

Android:完全開源,任何開發(fā)廠商和開發(fā)者都可開發(fā)安卓的軟件,由于開源,各大品牌手機(jī)硬件差異大,導(dǎo)致體驗(yàn)不同,兼容性不好

iOS:封閉,僅蘋果擁有

七、編程語言不同:

Android:java

IOS:Objective-c

八、升級(jí)應(yīng)用

Android:自動(dòng)升級(jí)應(yīng)用,也可通過應(yīng)用市場(chǎng)來升級(jí)

IOS:需要通過app store升級(jí)

九:軟硬件結(jié)合

Android:由于代碼開源,因此很多開發(fā)廠商都可以根據(jù)自己的設(shè)定來開發(fā)不同的手機(jī),APP不會(huì)針對(duì)各大品牌的手機(jī)專門做優(yōu)化,因此軟硬件結(jié)合差

IOS:由于封閉,因此蘋果一家獨(dú)有專利,所有的APP都針對(duì)IOS做優(yōu)化,因此軟件結(jié)合較好

十、應(yīng)用的刪除操作不同

Android:常見的刪除某一個(gè)操作,用長(zhǎng)按,點(diǎn)擊刪除或者左滑刪除

IOS:很多應(yīng)用都支持左滑刪除操作

十一、獲取日志和簽名方式不同

Android:可通過adb logcat獲取日志,Android studio,DDMS來獲取到日志信息。簽名可以通過jarsigner -verify -certs 包名

IOS:用xcode中debug工具/Itunes高級(jí)功能查看實(shí)時(shí)log,獲取簽名:解壓包取出plist文件,查看應(yīng)用簽名及版本信息,并要檢查證書正確性

十二、分辨率不同

Android:分辨率多達(dá)20多種

IOS:5種

十三、按鍵

Android:底部有3個(gè)按鍵:返回鍵、主菜單、前進(jìn)鍵,在應(yīng)用返回中,都可通過返回鍵回退到上一步

IOS:只有home鍵,所有的應(yīng)用進(jìn)入只有一個(gè)入口,每個(gè)應(yīng)用界面中都有返回出口

總結(jié):

Android:開源、界面好看,但安全性差、漏洞多、穩(wěn)定性差、系統(tǒng)耗電大、流量消耗大

IOS:封閉、安全規(guī)整、用戶體驗(yàn)好

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,934評(píng)論 25 709
  • 1、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽明AI閱讀 16,195評(píng)論 3 119
  • 下午下了班就開會(huì),7:00左右散會(huì),就著急回家,一路上春寒料峭,寒風(fēng)瑟瑟。到了家,孩子就跟我說:“媽媽,我今...
    上善若水_f9f1閱讀 209評(píng)論 0 1
  • 曾經(jīng)有一條隨心的道路放在我面前,我沒有去走,等我錯(cuò)過的時(shí)候我才后悔莫及,人世間最痛苦的事莫過于洗腦。 如果上天能夠...
    錦程寫書閱讀 274評(píng)論 0 1
  • 脂肪不躲避 附著于年輕的身體 生存于他人注視 喋喋不休的沉默日子 何種目的 基于 贊嘆的注目禮 幻想的甜蜜 合體的...
    芥一子閱讀 292評(píng)論 3 5

友情鏈接更多精彩內(nèi)容