[Android]android Service后台防殺



網上有很多辦法,
方法一:在JNI里面fork出子進程
service在單獨的進程中,在service中調用JNI的代碼,然后fork出一個進程,然后讓我們的service進程和fork出來的子進程一直運行.
在5以下是可以的,在5以上無效,
5.0的代碼:
Process.killProcessQuiet(app.pid);
Process.killProcessGroup(app.info.uid, app.pid);
4.3的代碼:
Process.killProcessQuiet(pid);

http://www.aichengxu.com/view/2402010

方法二:使用推送
在app中集成小米/友盟/Jpush/信鴿推送,在推送的service中監聽要守護進程的情況。
所以,正確的推送方案都是應該如此(不是系統推送,App殺掉都是起不來的)
1.第三方推送方案+小米推送+華為推送(兩個系統推送去喚醒 普通推送)
2.如果你是支持國外的應用,記得把,GCM也加上

方法三:START_STICKY

在android中,我們使用startService啟動服務。在Service的派生類里,會調用onStartCommand(Intent,int,int)來啟動服務。
onStartCommand有三種返回值:
START_STICKY:

使用這個返回值時,我們啟動的服務跟應用程序"粘"在一起,如果在執行完onStartCommand后,服務被異常kill掉,系統會自動重啟該服務。當再次啟動服務時,傳入的第一個參數將為null;
START_NOT_STICKY:使用這個返回值時,如果在執行完onStartCommand后,服務被異常kill掉,系統不會自動重啟該服務。
START_REDELIVER_INTENT:重傳Intent。使用這個返回值時,如果在執行完onStartCommand后,服務被異常kill掉,系統會自動重啟該服務,並將Intent的值傳入。
方法四: startForeground
后台運行的服務,被各種手機衛士和內存清理工具一清理或者onLowMemory時就被強行kill掉,有可能是系統回收內存的一種機制,要想避免這種情況可以通過startForeground讓服務前台運行,當stopservice的時候通過stopForeground去掉。

Android中的進程是托管的,當系統進程空間緊張的時候,會依照優先級自動進行進程的回收。Android將進程分為6個等級,它們按優先級順序由高到低依次是:

   1.前台進程( FOREGROUND_APP)
   2.可視進程(VISIBLE_APP )
   3. 次要服務進程(SECONDARY_SERVER )
   4.后台進程 (HIDDEN_APP)
   5.內容供應節點(CONTENT_PROVIDER)
   6.空進程(EMPTY_APP)


方法五:1 像素在前台
qq的黑科技

但是好像以上方法小米手機都不行。。。使用推送的話,一斷網就完蛋了...


免責聲明!

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



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