標籤:

android可以通過進入程序後台關閉運行程序達到減少內存佔用的目的,為什麼ios不行?

可能某些用詞不是非常準確,但我就想問下是什麼原理,ios這樣豈不是非常占內存,長期積蓄的話會不會讓手機變得非常卡,有沒有辦法沒有?


哈哈,只有我看懂了題主的意思。題主把內存和內置存儲混淆了。

無論Android還是iOS,程序都要存儲一些數據,否則微信收到的消息,還要帳號登錄信息,一關機不就沒了不是。Android可以單獨清除數據,就是把一個程序的所有數據全部清除,恢復到剛安裝的狀態,iOS不可以,在用量里只能連同程序和所有數據一起刪除,你需要再重裝一遍程序。

這些數據是存在內置存儲上的,無關你的內存佔用。沒事去清除它也挺傻的,你把應用程序的數據都清理了來減少內存佔用?那不是倒洗澡水的時候把孩子也倒了?而且擔心「長期積蓄的話會不會讓手機變得非常卡」,典型的Windows用戶思維,只要是文件就像清理掉,很擔心文件多了電腦會變卡。只要見到有清理的地方,什麼清除QQ聊天記錄,清除網頁記錄,就趕緊清理一下,覺得清理了電腦就不卡了,哈哈哈。就像以前一個朋友指著我的桌面說,你看你桌面那麼多圖標,電腦能不卡嘛,哈哈哈。

當你的內置存儲空間滿了需要清理時,iOS下檢查哪個占的空間最多,然後新聞類的進應用清理緩存,音樂和視頻應用進去清除離線的音樂和電影,還有大的遊戲刪一兩個,就有空間了。Android嘛,因為會自行在內置存儲上建文件夾,所以要進去看一看哪個占空間多。

蘋果和Google的程序員都遠比你聰明,記住這個原則:「不懂你就別動」。


在這件事情上android和ios的做法可以說是完全一樣的。

-

應用程序在後台有兩種不同的形式,一種是不能使用cpu的。這部分兩個系統的做法都是:只要應用程序自己沒有提出銷毀,有內存就予以保留,當需要開闢內存空間給別的用途時,它們是最優先會被銷毀的。


-


這便是為什麼很多時候切到另一個應用程序時能直接跳入而不需要重新載入。


-

在android裡頭,這類指的是進程中的activity對象。

-

還有一種形式可以在後台使用cpu,在android里叫做service,iOS自然也有對應的封裝。這裡兩個系統處理方法就不一樣了。service對象的優先順序僅比後台activity高,也就是說只要資源一不夠,後台的service就很容易被殺掉,而iOS做得更狠,有時間/內容限制,android的service除了不能直接改寫屏幕外,幾乎什麼事都做得來。

-

在android里還有另兩種情況:

-

一個是前台的activity調用了service(好像是什麼bindservice來者的),另一個是service在通知欄上打出了去不掉的通知。這兩種情況service的優先度極高,僅次於前台activity。


此內存非彼內存,所以這事說起來也挺糾結的。

傳統的內存有兩個概念:

一個是 Memory,台灣翻譯為『記憶體』,大陸一般叫做內存。俗稱也有叫做 RAM 的。——如果用 PC 打比方,這玩意其實對應於內存條,這個內存是 CPU 運行需要用的,有時也叫做運存,通常它的數據不能在斷電狀態下保持,內存中的所有數據,斷電關機之後都會丟失。

另一個是 Internal Storage,指的是設備內部安裝的存儲空間,有叫做 Flash 或者叫做 ROM 的,當然把他字面翻譯為內存其實更合適。但如果用 PC 打比方,這玩意的作用類似於硬碟,所以叫做外存更合適,外存中的數據,在關機斷電狀態下仍然可以保持存在。——在後面的描述中,我暫時把它叫做外存(雖然這並不是個很官方的稱呼)

第一種內存,如果佔用過多,會導致卡頓,因為打開新應用的時候內存不夠需要釋放舊應用,而釋放舊應用會導致垃圾回收,垃圾回收在 Java/C# 一類的虛擬機託管語言中會非常卡頓。

第二種內存,如果佔用過多,一般不會導致卡頓,但特定情況下,可能出現因外存佔滿無法啟動的問題,也可能出現因外存剩餘空間較少,導致 Flash 相關的性能問題(例如 Android 4.3 解決的那個問題)。

--

解決了基本概念,現在來回答題主的問題。

Android 進入程序清除後台數據,清除的是外存數據,與內存無關,所以不會影響卡頓相關問題。以前很多低配的 Android 手機配置的 Flash(外存)空間很小,導致了用戶不得不通過刪除數據來釋放空間,但這與卡頓其實沒有任何關係。

iOS 不清楚是否有這個類似的功能,但無論是 Android 還是 iOS,要想清除外存數據,至少有一個辦法:將一個軟體刪除,然後重新安裝,因為刪除一個App的時候,他所佔用的外存數據都會被刪除,然後重新安裝的時候,外存數據就沒有了。

總的來說,無論是 Android 還是 iOS ,清除外存數據都與內存佔用沒有關係的。


ios跟andriod的後台機制不一樣 ios準確來說一直是假後台 程序並沒有真實後台運行 只是暫時記憶最小化程序時的狀態 時間長了就沒了 所以不需要清理一樣很流暢 而andriod後台機制是真正的在後台運行 所以需要及時清理 不然會造成機器用著內存不夠 很卡的境況


因為ios不需要清理


iOS可以清理內存啊,後台關掉內存就會得到釋放,區別是iOS後台任務除了幾個許可權較高的之外只凍結數據,不佔用進程,新消息走推送中心,一旦內存不足會被自動清理,Android是強制後台,是運行狀態的,需要手動清理


Android先天開放性的基因使得它可以比ios做許多更多的事


iOS通常就不允許app常駐內存。

app默認情況下只能在後台常駐5s,有需要的話最多可以額外延長到10分鐘,只有播放音樂、定位等特殊需求的才能常駐內存。


推薦閱讀:

哪些 iOS 應用充分發揮了 64 位 A7 處理器的性能?
為什麼iOS偽後台,但是有很多軟體也會在後台一直運行?
作為iOS開發,需要具備怎樣的能力,才能在北上廣,拿到1萬的薪資?
資深 iOS 開發工程師需要達到什麼水平?
如何評價 Swift 4 的開發計劃?

TAG:iOS開發 | Android |