怎麼讓 Android 程序一直後臺運行,像 QQ 同樣不被殺死

轉自:https://blog.csdn.net/javazejian/article/details/52709857java

 

做者:閉關寫代碼
連接:https://www.zhihu.com/question/29826231/answer/71207109
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

工具

強烈建議不要這麼作,不單單從用戶角度考慮,做爲Android開發者也有責任去維護Android的生態環境。如今不少Android開發工程師,主力機竟然是iPhone而不是Android設備,感到至關悲哀。.net

從技術角度歸納一下如今廣泛的防殺方法
    1. Service設置成START_STICKY,kill 後會被重啓(等待5秒左右),重傳Intent,保持與重啓前同樣
    2. 經過 startForeground將進程設置爲前臺進程,作前臺服務,優先級和前臺應用一個級別,除非在系統內存很是缺,不然此進程不會被 kill
    3. 雙進程Service:讓2個進程互相保護,其中一個Service被清理後,另外沒被清理的進程能夠當即重啓進程
    4. QQ黑科技:在應用退到後臺後,另起一個只有 1 像素的頁面停留在桌面上,讓本身保持前臺狀態,保護本身不被後臺清理工具殺死
    5. 在已經root的設備下,修改相應的權限文件,將App假裝成系統級的應用(Android4.0系列的一個漏洞,已經確承認行)
    6. Android系統中當前進程(Process)fork出來的子進程,被系統認爲是兩個不一樣的進程。當父進程被殺死的時候,子進程仍然能夠存活,並不受影響。鑑於目前提到的在Android-Service層作雙守護都會失敗,咱們能夠fork出c進程,多進程守護。死循環在那檢查是否還存在,具體的思路以下(Android5.0如下可行)
      1. 用C編寫守護進程(即子進程),守護進程作的事情就是循環檢查目標進程是否存在,不存在則啓動它。
      2. 在NDK環境中將1中編寫的C代碼編譯打包成可執行文件(BUILD_EXECUTABLE)。
      3. 主進程啓動時將守護進程放入私有目錄下,賦予可執行權限,啓動它便可。
    7. 聯繫廠商,加入白名單
相關文章
相關標籤/搜索