標籤:

Android的推送sdk是如何喚醒App的?

現在app1被殺死了,app2和app3以及pushservice還活的,當app1的推送消息到來時,pushservice如何喚醒app1?

如果使用消息的廣播機制,那其它app也能收到消息,那消息就沒有做到應用隔離而且會造成廣播"風暴"。一般的推送sdk究竟是怎樣做的?


謝邀,想以自家產品為例來說明,解釋不太清楚的地方,請湊合著看

接入個推SDK的應用的推送都擁有獨立進程的,但安卓4.0以上系統如果應用被一鍵殺死進程,用戶就好收不到消息。

我們的做法是凡是使用個推的APP推送鏈路會共享,程序被一鍵殺掉後能通過用戶自動打開高頻應用從而使其他APP推送鏈路暢通。這不僅實現了各個應用之間的互相看護,還大大減少了應用對手機電量以及流量的消耗。普通的推送技術採用的是每個應用單獨一個通道,一旦進程被殺死,應用就會和伺服器失去連接。通道被單方面關閉了,只有當用戶再起開啟時,關閉的門才能被打開。而這項多通道合併技術,顧名思義,是將這些通道合併在了一起,形成了一注更大的水流,即便有個別支流被強制關閉,只要留存的應用中有其他接入個推的應用,整條通道依然能導通。通過SDK內部進程間的通信機制,被關閉的部分可以重新打開,實現了應用相互帶動的良好關係。

下面一張圖解釋應用看護的流程:

想要說明的一點是,看護功能是相互的,這對我們開發者來說可以達到互利共贏的目的。新版SDK默認開啟看護以及被看護功能,若需退出看護聯盟,應該可以聯繫技術支持來解決。

不知道有沒有幫到你,如有更多問題,請私信來擾,哈哈~


比如百度系的APP有集成百度賬戶共享,百度運推送這些服務,只要運行一個百度系app或者某一app監聽系統廣播自啟,該app會以廣播或者服務的方式拉起手機中其他系列app.這種拉起是通過在manifest中指定的相同的action,例如百度賬號共享的action是baidu.intent.action.account.SHARE_SERVICE,通過該action執行bindService,其他所有系列app對應service所在的進程都會啟動.其他的推送也類似.為什麼都說Android不好用,想想後台偷跑應用,耗電,耗流量,彈廣告.單就國內這些推送全家桶,所有東西都被玩濫了,別人才不管你的手機耗不耗電,耗不耗流量.


推薦閱讀:

怎麼使用gcm推送?
有用過 雲巴 實時消息系統的嗎?用起來怎麼樣?謝絕廣告
人們為什麼厭惡新浪微博手機端推送,卻對QQ桌面彈窗沒那麼大的抱怨?
用WebSocket做WebApp應用內推送體驗如何?流量消耗是否可接受?

TAG:推送Push |