標籤:

安卓後台程序為什麼不能徹底關閉?


①流暢度不如蘋果是優化問題,本質上來說和後台程序沒有什麼關係。

②進程

安卓的後台的設計本身就是淡化用戶對後台的管理,由系統來完成系統資源的調配。

Android系統會盡量維持一個進程的生命,直到最終需要為新的更重要的進程騰出內存空間。為了決定哪個該殺哪個該留,系統會跟據運行於進程內的組件的和組件的狀態把進程置於不同的重要性等級。當需要系統資源時,重要性等級越低的先被淘汰。

安卓的進程分6類。

1.前台進程(foreground):目前正在屏幕上顯示的進程和一些系統進程。最遲終止的就是前台程序。所謂前台程序其實就是你目前屏幕上運行著的程序,各種遊戲、qq、微博……Android的應用在被切換到後台時,它其實已經被暫停了,並不會消耗cpu資源,只保留了運行狀態.所以為什麼有的程序切出去重進會到主界面.但是,一個程序如果想要在後台處理些東西,如音樂播放,它就會開啟一個服務.服務可在後持續運行,所以在後台耗電的也只有帶服務的應用了.這個在進程管理軟體里能看到,標籤是service.而你平時用home鍵調出來並且殺掉的,其實就是這個前台進程,但它其實是最無辜的,因為人家在後台也就佔佔你內存而已,並不造成耗電等問題,系統資源吃緊的時候,系統自己也會動手把他丫的殺了。

2.可見進程(visible):一個進程不擁有運行於前台的組件,但是依然能影響用戶所見。如,輸入法。

3.次要服務(secondary
server):
簡單來說就是一些殺掉了不影響系統穩定運行,但是嚴重影響用戶使用的服務。如gms、撥號器等,殺掉相當影響用戶使用。

4.後台進程(hidden):當前台程序 (foreground)被你一個home鍵打回大西洋的時候,它就進入後台進程的行列。wp、ios對待第三方應用的後台進程基本上都是墓碑模式,即進入後台即時冷藏;其實安卓4.0後也支持類似的操作,只是需要用戶自行解決,同時冤魂不散的後台服務依舊在耗電耗內存污染通知欄。在系統內存不足找人開刀的時候,這種進程一般都是任人魚肉的那種…

5.空進程(empty):沒有任何東西在內運行的進程,保留這類進程的唯一理由是高速緩存,這樣可以提高下一次一個組件要運行它時的啟動速度。系統經常為了平衡在進程高速緩存和底層的內核高速緩存之間的整體系統資源而殺死它們。

(其實還有一種,叫內容供應節點,這貨的存在就是給其他應用調用其內容的,我覺得這事是服務於應用,跟用戶一級沒什麼直接聯繫,原來就沒鳥它,現在補補咯……)

以上5種,自上而下,越下重要性越低,系統需要資源的時候,死的也就最快。

其實嚴格來說,安卓的後台程序是可以完全關閉的。因為根據如上的定義,後台進程(hidden)根本就是前台進程被打進冷宮,你長按home就能滅了它。

而你所指的「不能徹底關掉」的,其實是程序在後台給你打開的服務、空進程。這些東西home鍵是關不掉的,需要用到一些特殊的應用。

各個應用、手機助手殺「後台」的深度都不一樣,有些只是殺到後台進程(hidden)一級,有些就殺到前台進程都不放過,最後連桌面都要重新載入…

所以安卓其實是可以完全殺掉所有前台、後台、服務,但這樣用著,不更蛋疼么?

ios流暢本來其實是不關後台什麼事的,但實際上ios運用墓碑模式,同時限制系統服務,所有推送都統一到一起。本身就極大地減少了內存的消耗;而wp更加是限制後台應用數量,以及只分配給每個應用一定量的內存,每個應用都只能運行在分配給它的內存中(計劃經濟…),所以wp理論上不會出現安卓那種內存溢出的情況。(其實安卓本身原來也有限制內存佔用量,但這個量很小只有幾十MB人家都是幾百MB…當然了,雞賊的開發者會用各種手段突破這個形同虛設的限制…)

而安卓應用開多了,慢了,其實是內存佔用太多,系統需要幹掉幾個沒用的傢伙,消耗了時間,而wp和ios因為其「計劃經濟」的優勢,所以從來不需要臨時擠內存。

——————————————————————

寫這麼多字還沒人家貼兩張圖排名高……靠……說錯了你指出來啊……太長你看不下去也別點反對的,你們這群淫賤的淫……

如果要牽扯到應用殺不死,或者說死了又鹹魚復活…這要扯到android廣播機制……(怎麼扯到這麼遠……)

系統接收到了一個動作、信息,比如系統接收到有人給你打電話,系統就跑上村頭的廣場,拿著村委會的小喇叭,破口大叫——「那個xxxx他媽給打電話啦,來淫啊~」然後住在村尾家裡裝著「廣播接收器」的一個叫「電話」的人就跑出來,再執行給你響鈴等等的動作。

有些應用,它自己本身和「打電話」這個動作沒什麼關係,但是它也有屬於「打電話」的那個類別的「廣播接收器」,然後跟隨廣播被系統調用而啟動。

反正說到底都是部分無良開發者……

本人不是專業的開發者,也沒系統地學習這方面,將就著看吧……有錯歡迎指出,但不歡迎提意見。


其他答案都沒說到點,程序不能完全關閉的原因是因為安卓系統的廣播機制,如果你會一些面向對象編程的話更容易理解,事件、廣播、消息、監聽等。。

我簡化模型來講一下,理解就好。

安卓系統時時刻刻由於用戶操作和系統狀態變化產生各種事件,而事件需要程序去處理,程序安裝時註冊監聽器表明我能處理xxx這些事件,發生某事件時,安卓發送廣播消息,能處理該事件的程序就會被調用,調用的是默認程序或由用戶選擇程序處理。而事件有屏幕解鎖、關閉、home被按下、無線網路狀態變化、電量變化、收到發出簡訊和呼叫等等等等太多了。。。所以一個程序想啟動太容易了

比如 我用過的某版本lbe(現在不用了)會監聽home事件,所以每當你按下home返回主屏幕時lbe就會啟動,你用普通方法完全殺得掉?

注意,廣播是可以由程序自定義的,更加加深題主的問題,明白了?國產軟體流氓不少,一般用戶還真玩不轉安卓,所以安卓不是一個生態良好的好系統


有些人不懂得設置,有些人樂於保存各種後台閱讀各類消息打發時間,有些人需要保持各種應用的在網狀態。各系軟體連鎖啟動、不斷自啟後台是開發者和公司的無賴行徑,背離了Android系統的初衷,綁架了用戶,可以選擇保留安裝包卸載,需要時重裝登錄。最重要的是,安卓早已開放了後台程序的墓碑機制:設置&>開發人員選項&>不保存後台,效果不錯。


一用安卓就要逼著自己變專家,各種無節操召喚,小APP還可以不裝,大公司尤其以百度阿里為首,全家桶和兄弟軟體互相徵兆,用綠色守護打入冷宮都隨時能滿血復活,這樣的系統生態,google造嗎?


國內很多無良軟體為了增加用戶粘性而改變了自身程序的優先性,像遊戲中心這樣的軟體都敢用服務常駐內存了,能不卡么?

另外有些軟體為了保障自己的服務能夠在內存較少的時候依然常駐內存,還增加了一個終止其他程序的許可權。

而問題在於其它軟體也不傻,也都帶著這許可權。被終止以後立即原地滿血復活,接著殺其他軟體的進程

感覺手機卡?那是你的後台進程在互相殺著玩呢……

不要跑來給我科普,真討厭討厭討厭


只要不用國內的軟體,2G內存也足夠跑起來,現在主要是國內的推送互相喚醒.如果都和蘋果一樣用google的推送,N多軟體根本沒必要跑後台


說那麼多沒用的。

這就是蘋果偽後台的良苦用心。

個手機終端設備,千百的電池,就要多後台切換。

明顯和消耗相悖的啊。

更別提那麼多無良軟體趁虛而入。

一個推送,後台全部個個激活了。

而蘋果,只要你不點它,再多推送也只有一個唯一的itunes通道。


實在看不下去了,說安卓不流暢是因為不高端,或者是跟後台機制沒關係的你們夠了!

Note 3算高端么?掉幀依然有。 Lumia 520算低端么?從來不掉幀。
為什麼會這樣?完全是因為後台機制的問題!
蘋果很流暢,但是到了IOS7,在4S上面也是有點輕微掉幀,不過依然比安卓強(我說的是事實,不信自己去試試,試過了你再來反對或者噴我)。

原因很簡單,iOS和 Windows Phone都是墓碑機制(或者類墓碑機制)後台,一旦按 Home返回主頁,後台就被殺了,就剩下一個系統的推送任務和一張截圖。而安卓不一樣,安卓的推送是靠程序後台運行實現的,因此不會完全關閉。


因為產品經理說別人家做到了,你們也得做到,然後程序員就加班寫了保活。然後手機廠商一看哎呦這樣不行啊,把丫手段封掉不能讓用戶費電!然後2b產品經理繼續懟程序員繼續做保活,因為別(騰)人(迅)家的app就可以啊!程序員解釋說人家是白名單,2b產品說呵呵我不管,我要保活!


8錯!


不問是不是,就問為什麼


推薦閱讀:

有哪些較好的,並用於實際生產中的 Android 熱修復方案?
Android 系統手機的音樂播放器有哪些推薦?
安卓應用怎樣去廣告?
如何屏蔽啟動軟體時的廣告?
為什麼現在android旗艦都已經上2K解析度了,蘋iphone6plus上1080p有時候還卡?

TAG:Android |