android進程保活的幾種方法


方案一:

開啟一個像素的Activity

  據說這個是手Q的進程保活方案,基本思想,系統一般是不會殺死前台進程的。所以要使得進程常駐,我們只需要在鎖屏的時候在本進程開啟一個Activity,為了欺騙用戶,讓這個Activity的大小是1像素,並且透明無切換動畫,在開屏幕的時候,把這個Activity關閉掉,所以這個就需要監聽系統鎖屏廣播.

方案二:

   據說這個微信也用過的進程保活方案,該方案實際利用了Android前台service的漏洞。
原理如下
對於 API level < 18 :調用startForeground(ID, new Notification()),發送空的Notification ,圖標則不會顯示。
對於 API level >= 18:在需要提優先級的service A啟動一個InnerService,兩個服務同時startForeground,且綁定同樣的 ID。Stop 掉InnerService ,這樣通知欄圖標即被移除。

方案三:

  進程相互喚醒

  顧名思義,就是指的不同進程,不同app之間互相喚醒,如你手機里裝了支付寶、淘寶、天貓、UC等阿里系的app,那么你打開任意一個阿里系的app后,有可能就順便把其他阿里系的app給 喚醒了。

方案四:

   JobSheduler

 JobSheduler是作為進程死后復活的一種手段,native進程方式最大缺點是費電, Native 進程費電的原因是感知主進程是否存活有兩種實現方式,在 Native 進程中通過死循環或定時器,輪訓 判斷主進程是否存活,當主進程不存活時進行拉活。其次5.0以上系統不支持。 但是JobSheduler可以替代在Android5.0以上native進程方式,這種方式即使用戶強制關閉,也能被拉起來,親 測可行。

總結:

多種保活方式,沒有說哪一種最好,只有是在什么場景下,使用哪一種最合適;當然,這些方式不是我發明或發現的,但是我覺得如果不知道的好好了解一下,對自己會有很大的幫助.掌握一些進程保活的手段,這不是耍流氓,是很多場景如果要想為用戶服務,就必須有一個進程常駐,以便在特定的時候做特定的事情。誠然,但凡進程常駐內存,無論怎樣優化,都會或多或少的增加一些額外的性能開支,在為用戶最負責任的服務,最高品質的體現我們的價值的前提下,我們要盡可能減少內存和電量的消耗

本文摘自原文:https://blog.csdn.net/qq_37199105/article/details/81224842

 

 


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM