[Android]android Service後台防殺

來源:互聯網
上載者:User

標籤:


網上有很多辦法,
方法一:在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後台防殺

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.