回覆列表
  • 1 # 弱電安防電腦

    1.為什麼用Java?

    因為Java簡單,能讓龐大數量的Java程式設計師很容易轉到Android開發上,進而豐富Android生態,以此跟iOS生態抗衡。

    2. 為什麼要用Dalvik/ART?

    同樣,在選擇了Java語言後,接下來就是虛擬機器了,由於官方的HotSpot 是基於棧結構的虛擬機器,而Android的CPU指令集一開始就選擇的是ARM,ARM的特點就是暫存器多,所以就開發了Dalvik,Dalvik相對於HotSpot的最大區別就是改成基於暫存器的了,這樣可以提高效能,也最大化發揮ARM的優勢。至於ART,其實就是最佳化後的Dalvik。

    3. 為什麼不直接用Linux 核心+驅動+服務?

    這個其實很簡單,因為Linux是GPL協議,如果按照這個模式,那晶片商像高通/MTK的驅動都得開源,而他們是很不願意開源的。

    谷歌為了解決這個問題,就在Linux 上層添加了一個HAL層(Hardware Abstract Layer),以此把核心跟驅動程式隔離了,這樣驅動那裡就可以不用開源了。也是因為這個原因,Linux 社群也不再認為Android是Linux的一個分支版本。

    除了協議的原因之外,Android還面臨的一個問題就是相容的廠商超級多,每家廠商的驅動都不一樣,這也是HAL層的另一個好處,就是隔離驅動,要不然把驅動都放進來,系統要升級可就麻煩了。

    4. 為什麼要有一個Runtime 而不是直接編譯機器碼來執行?

    這個原因主要原因其實是為了安全性。手機裝置跟電腦有個很大的不同,手機上有很多的使用者隱私資料,為了這個考慮就做成了每一個App都是一個獨立的沙盒環境,互相之間隔離,每一個這個東西就是Runtime做的。直接編譯成機器碼App能做的事情很多,就會有安全隱患。而Runtime能夠限制到App能做的事情是有限的,而且還能做許可權的控制。

    5. 至於殺記憶體的問題

    早先的android系統記憶體都是很小的,256M,512M很常見,硬體能跟電腦比也就是近兩年的事情。所以 Android系統一開始就有Low Memory Killer 的設計,就是在記憶體不夠用時候,能夠把那些很久不用的app幹掉,留給使用者當前看到的app。

    至於電腦上,肯定也是會有殺程序的情況的,只不過電腦的策略寬鬆很多,不會輕易殺程序。而 Android本身的互動形式就和電腦的不一樣,電腦上不太會考慮一個App的耗電情況的,而移動裝置就不一樣了,電池賊小,使用者基本上一定時間內只會用到最新的3 4 個app,那些打開了幾天的App不殺它在後臺會帶來電量損耗的問題。

    而且這個殺記憶體的策略是每一個廠商可以自己定製的,原生的本身對後臺App還是相對寬鬆的,一些定製廠的策略可能就比較嚴格,比如說華為相對就比較嚴格。

    殺記憶體考慮到的不僅僅是當前記憶體還夠不夠用,還要考慮的是這個App你短期內還會不會再再開啟,如果系統判定你短期內不會用這個App也會把它殺掉,要不然多費電。這樣才能做到3000多mAh的電池能待機1天

  • 中秋節和大豐收的關聯?
  • 龍洞怎麼形成?