網上有不少辦法,
方法一:在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);android
http://www.aichengxu.com/view/2402010app
方法二:使用推送
在app中集成小米/友盟/Jpush/信鴿推送,在推送的service中監聽要守護進程的狀況。
因此,正確的推送方案都是應該如此(不是系統推送,App殺掉都是起不來的)
1.第三方推送方案+小米推送+華爲推送(兩個系統推送去喚醒 普通推送)
2.若是你是支持國外的應用,記得把,GCM也加上工具
方法三:START_STICKYui
在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個等級,它們按優先級順序由高到低依次是:get
1.前臺進程( FOREGROUND_APP)
2.可視進程(VISIBLE_APP )
3. 次要服務進程(SECONDARY_SERVER )
4.後臺進程 (HIDDEN_APP)
5.內容供應節點(CONTENT_PROVIDER)
6.空進程(EMPTY_APP)後臺
方法五:1 像素在前臺
qq的黑科技service
可是好像以上方法小米手機都不行。。。使用推送的話,一斷網就完蛋了...程序