標籤:
網上有很多辦法,
方法一:在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去掉。
方法五:1 像素在前台
qq的黑科技
但是好像以上方法小米手機都不行。。。使用推送的話,一斷網就完蛋了...
[Android]android Service後台防殺