Android系統的後台程序和後台自啟動程序和後台推送到底是個什麼關係?

比如我打開微信,然後按home鍵返回桌面,微信在後台運作,如果我用軟體把微信的後台自啟動關閉,再把微信從後台里清理掉,這時候我還能收到推送消息嗎?其他非社交類的軟體這樣做能收到推送嗎?


我感覺你的意思是指Android的緩存,服務和GCM。

通常我們說緩存就是暫時把沒在前台的程序放在內存里,比方說我打開簡訊應用,然後退回到Launcher打開微信,那麼簡訊就成了所謂的後台程序放在了RAM里,這時候簡訊應用什麼也不會幹,就是像一個安靜的美男子一樣呆在RAM里,不會消耗CPU資源,如果你這時候再打開簡訊應用,會發現載入速度會比你第一次打開簡訊應用快很多,因為這是從RAM里直接載入的。一些比較低級的清理軟體其實清理的就是這個,實際上很沒有必要,為了看上去爽,實際上造成了先前載入過的應用需要重新載入,得不償失。所以你看原生Android(包括iOS)都沒有一鍵清理內存的功能。

服務就是很多人所說的後台了,你可以理解為一個沒有界面的應用,除了其生命周期有規定,其他的東西都沒有限制,它可以調用各種感測器,可以與不同的伺服器進行通信,它可以十分鐘掃一次SD卡,也可以每秒鐘都跟伺服器輪詢是否有新的消息,只要程序員願意,服務可以在任何時間做任何事。所以由於服務能幹不同的事,程序員的水平也參差不齊,所以有的服務只會消耗極少的系統資源,有的服務則會嚴重拖慢系統。服務不像緩存的應用那樣,如果RAM留給緩存應用的空間滿了,那麼系統就會選擇性的踢出去個別占緩存的應用,留出新的空間。服務就不會像緩存的應用那樣弱弱的任由系統宰割,系統無法自動釋放服務所佔據的資源,所以如果某個服務佔據了大量的RAM或者CPU資源,那系統自然就卡爆了。

GCM的出現可以說在一定程度上解決了服務各自為政的情況,GCM顧名思義就是Google雲消息服務,它本身也是一個服務,是為系統提供一個統一的消息介面,所有需要消息推送的應用比如微博、微信、QQ都可以通過這個介面進行消息推送,推送的途徑就是從應用的伺服器把消息發送到GCM的伺服器,然後由GCM伺服器發送到你手機上的GCM客戶端,GCM客戶端再發到相應的APP,這樣一來,多個應用共用一個進程接收消息,是不是就節省了很多資源呢~

當然GCM也不是萬能的,它只能提供消息推送,另外因為我朝特殊原因,要麼因為手機上沒有Google服務框架,要麼因為某牆作怪,導致手機不能正常接收GCM消息,所以很多我們熟知的廠商乾脆就一管擼到黑,繼續用服務的方式提供消息推送啦。

根據你的問題,做如下解答:

如果只是應用的緩存被清掉了,它負責推送的服務沒被殺掉(其實服務還蠻難殺的,註冊了的服務系統會根據其生命周期自動將其「復活」,感覺好像「少年你還有未完成的使命,返回人間去吧」這樣),那麼應用依然會收到消息,依然會彈個通知給你。

如果應用連負責推送的服務都被殺掉了(Greenify可以做到,具體的方法這裡就不多說了,網上搜有專門的回答),而且這應用趕巧又沒用GCM,那麼抱歉,消息收不到,再漂亮的妹子發來的消息也收不到,再大的領導發來的消息也收不到。

如果這應用剛好用了GCM,剛好你又神通廣大在本朝能正常接收GCM推送,那麼消息會收到的。

微信現在把GCM作為一個實驗特性,並且還支持Android Wear語音回復,突然覺得鵝廠微信這隻還蠻潮的。

艾瑪手機碼字真心累


簡單點說安卓系統你把自啟動和後台程序都關了,微信的消息就收不到了,因為安卓程序想要接收推送需要在後台常駐(雖然谷歌也有類似iOS的統一推送服務但國內軟體基本無視),而iOS和wp系統都是統一推送服務,軟體不需要後台常駐,開發商把消息發送到蘋果和微軟的伺服器,伺服器會推送到用戶手機上,說白點,安卓如果需要接收十個軟體的消息可能需要十個後台進程和服務,而iOS和wp無論需要多少軟體的推送都只需要一個系統自帶的推送服務。這也是安卓比iOS和wp吃硬體的原因之一。當然安卓這樣的機制也不是沒有好處,至少可以後台下載,而iOS後台下載是有時間限制的,wp沒用過不清楚,不過我還是喜歡iOS那樣的推送,畢竟安卓如果把所有軟體都自啟動後台接收消息那要卡成翔了。


打個比方,我是微信,房子是安卓系統,你在屋外面,

我進入後台時,會經常聯網看看你有沒有收到消息,如果收到了我就在屋裡面大喊一聲「你有消息了!」

你把我進程殺掉了,我就不能後台聯網,就不能跟你說我收到消息了。

但是系統推送不一樣,系統推送是這樣的。

我是微信,我住進房子(系統)的時候跟系統說,我住進來了,你把你的地址給我。然後我把這個房子的地址給我總部(伺服器),然後當有人給你發消息的時候,總部就會給這個地址寄一封信。。房子看到了這封信,就跟你說,你有消息了,但是這封信我不知道,也就是這個時候我不知道你收到了消息。。。


剛剛翻到推送解決方案。三張圖看Android,iOS,wp的差別。就連沒人用的wp都要設計得好一些。

iOS和wp是首先推送給apple和微軟的伺服器,再推送到手機上,應用啟動以後就可以直接推送了。

主要是通過service常駐內存和監聽廣播事件實現的。所以Android是不能禁止應用自啟動的。因為系統狀態的改變所有應用都可以監聽。都能重新喚醒。

吐槽一下,簡單的例子是:安裝應用關你微博屁事,要監聽這個事件。作為一名程序猿,知道Android的痛點卻也只能幹著急。廣播機制本來是一個很好的設計,卻被濫用了。只開放部分監聽事件,限制應用許可權,應用目錄私有化。

最後的最後,Google只是技術精英的思維,並沒有把用戶當小白。不適合做產品。


推薦閱讀:

如何評價「微軟仍未放棄Win10兼容安卓應用」的新聞?
如何評價 LG G5 手機及家族系列產品?
Android 4.0 需要殺進程的軟體嗎?
我們在平時或面試遇到這些問題時,我們應該怎麼回答?
如何評價微軟的 AoW 技術(Android on Windows)?

TAG:手機 | Android開發 | 數碼 | Android | Android後台 |