1. 程式人生 > >怎麽讓 Android 程序一直後臺運行,像 QQ 一樣不被殺死

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

著作權 RoCE 就是 自己 檢查 ble 技術 來源 進程守護

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

作者:閉關寫代碼
鏈接:https://www.zhihu.com/question/29826231/answer/71207109
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

強烈建議不要這麽做,不僅僅從用戶角度考慮,作為Android開發者也有責任去維護Android的生態環境。現在很多Android開發工程師,主力機居然是iPhone而不是Android設備,感到相當悲哀。

從技術角度概括一下現在普遍的防殺方法
    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. 聯系廠商,加入白名單

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