安卓系統的後台是怎樣的?
關於安卓的後台,實在是有很多大神有各種意見,但是似乎說的不太一樣,有的說安卓其實一後台就凍結了,那不是和蘋果一樣,可是為什麼開多了任務會卡?有人說都在後台,當內存不夠時就釋放最不常用的,有人說要後台就要開服務,那服務總是後台?退出後為什麼還是占內存?還有ram和rom,ram有什麼特殊的地方?為什麼一定要緩存及運行在ram里?
activity一丟到後台就停下來(相應的activity里會有一個onStop()回調)。如果一個進程丟到後台時(process)只包含activity,就是所謂:
安卓其實一後台就凍結了
以這樣的形式,二十多這樣的不消耗CPU的process佔據了大約不到500兆的空間,但這裡把它們佔據的空間標記為free,表示它們的優先順序很低,如果系統需要更多內存,第一個想到的就是找它們開刀。然而沒有它們,每次切換到另一個應用程序時,都要花費相當於重新載入的時間。
如果真的要殺Activity,Android還留了一個onDestroy()回調,Activity可以在裡面寫好墓志銘,等到重生時能原地滿血復活------所謂墓碑機制
舉例:
在我的手機上,沒有緩存進程時,啟動淘寶需要大約7秒鐘,有緩存進程時,只用1秒便能恢復運行在官方模擬器(armv7)里,沒有緩存進程,啟動qq瀏覽器直到顯示出快速導航大約花費10秒,有緩存進程時,花費不到兩秒
service就是用來在後台運行的(它還可以用來做一些「前台」的工作來避免阻塞主線程)。如果一個應用程序的進程跑到後台時,沒有關掉(涉及onDestroy()回掉)它包含的Service----故意開啟,或者因故自己關不掉。那麼service就會運行直到關閉為止。可以看到只有目前的Activity所屬的應用程序:Settings是可以不包含service而運行的。
其它的幾個都是service,這些內容佔掉250兆左右內存。
再左邊的"used"的內存包括了那些不屬於「Android應用程序」的軟體的進程,Android Framework等,還可以看到2G內存有一部分未顯示在圖中(圖中只有1.8G左右的內存),用來存放Linux Kernel,基帶鏡像,充當顯存等作用。
這一段是猜測:service運行時間長了或者把cached process殺了還嫌內存不夠,系統就會對一般的service開刀。標記為Important,或者是前台service的優先順序更高,不容易被殺死。就Android應用程序而言前台Activity的優先順序最高,只要不出導致崩潰的Exception或者嚴重的內存不足,它就不會死。至於Android怎麼處理Activity、Service,Process、Thread之間的關係;有運行著的Service而沒有獲取wekelock時讓設備休眠時,Service/Process處於的狀態算什麼(我們知道剛關屏幕的時候,沒有鎖wakelock的Service還是能動的,過大約十二十分鐘,Service才會什麼也做不了),請查閱相關資料,我不知道。
這裡有從開發者角度的說明:
Android 組件Service 詳解總結,Thread關於內存的事項:
如果硬碟速度足夠快,內存這東西是不是就可以取消了?-
如果是為了防止阻塞UI線程而作非同步運行,Android還可以利用Java的Thread,以及Android的AsyncTask。別的系統肯定有達到同樣目的的實現。可以看到
iOS有非常類似Activity的機制,而Android的Service在iOS中則沒有如此一致的實現。iOS 7 的新後台多任務(multitasking)機制是如何工作的?總結一下後台的原理和到底什麼是消耗我們的內存。
--------------------------------------------------------------------------------------------------------------------------------------------1、Android的每個應用都獨立運行在單獨的任務棧裡面,這樣避免了某個應用的崩潰導致整個系統崩潰,這樣做的代價就是內存需要更多;
2、Android的應用被切換到後台以後,其實它已經被暫停了,這時候只保留應用運行狀態(包括應用的靜態變數,IO流等,所以開發應用的時候應該即時進行釋放)這樣的好處是可以很快速的恢復應用,但是這些也會有少量的內存消耗;
3、後台Service,通常後台服務都是處理一些耗時、數據量大的操作,這個肯定是又耗內存又耗電的。
通常我們使用Android手機的時候常用軟體是不需要刻意去手動清理的,那我們啟動一個大型遊戲的時候內存不足怎麼辦?Android在系統內存不足的時候會自動觸發系統的進程調度策略,用來選擇性的反覆篩選和關閉一些優先順序低和內存佔用大的應用,但是這個策略執行是很消耗系統資源的,所以這時候我們會感覺到明顯的卡頓。
RAM就是內存,比如常見的512M、1G、2G;ROM就是機身存儲空間,比如iPhone的16G、32G、64G。不太懂,可能和安卓的虛擬機以及它的預編譯有關吧,每次運行都要預先編譯轉換語言,這也是安卓系統卡慢,吃配置的原因之一吧,好在5.0以後的art模式,不用預編譯了,真的流暢度提升了好多
我只知道,google搜索,onenote,這些60多m的程序,啟動後不用就後台自動緩存了,下次秒開,而且不用時也不耗電。
這才是安卓真正的不需要退出鍵的典型。
反觀其他的毒瘤APP,打開後,多的能出現數個進程和數個服務,連續返回鍵,退出和一鍵清理都阻止不了他們「正在重新啟動」
每次打開這些APP,啟動耗時,關閉時還得強制關閉,更煩心的還有不停的許可權請求,沒有就拒絕運行。………………
看來用國產毒瘤APP,同等配置永遠是別想和iOS比流暢度了,現在手機里能用網頁的全部網頁。………………知乎沒有退出鍵,後台也有進程,即使這樣,還是不「流暢」推薦閱讀:
※拿到一個apk包後,怎麼判斷其是否加殼了?是否做了代碼混淆?
※如何通過自學成為一名 Android 應用開發工程師?
※Android 和 iOS 應用開發有哪些不同?
※想開發一款安卓社交類的APP需要有哪些準備?
※如何實現 Medium for iOS 那般的下劃線效果?