我的原文: http://blog.csdn.net/brycegao321/article/details/52312030
成都創(chuàng)新互聯(lián)公司服務(wù)項目包括浮山網(wǎng)站建設(shè)、浮山網(wǎng)站制作、浮山網(wǎng)頁制作以及浮山網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,浮山網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到浮山省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!有圖有真相, 親測錘子T2、華為Mate8手機(jī)殺掉進(jìn)程后能自啟, 我設(shè)置的自啟時間間隔為500ms(僅僅是為了測試)。
首先要明確保活的概念:
1、非android核心進(jìn)程(例如com.android.phone)都可以被干掉;
2、?;畈⒉荒苷嬲谋WCapp進(jìn)程不死, 而是能在被干掉后馬上啟動;
Android系統(tǒng)按照進(jìn)程的優(yōu)先級分為:
1. 前臺進(jìn)程(Forgroud process): 頂層activity(已執(zhí)行onResume); 有個Service,并綁定到跟用戶正在交互的activity;在Service里調(diào)用了startForground函數(shù);正在執(zhí)行 onReceive函數(shù)的BroadCastReceiver。
2. 可見進(jìn)程(Visible process): 被對話框遮擋的activity, 執(zhí)行了onPause; 擁有綁定到Activity的Service, 但該Activity被遮擋了, 例如按Home鍵,并執(zhí)行了onStop。
3. 服務(wù)進(jìn)程(Service process): 有正在運行的Service, 但是沒有1/2的特性。
4. 后臺進(jìn)程(Background process)沒有正在運行的Service, 只有不可見的Activity, 即Activity執(zhí)行了onStop函數(shù)。
5. 空進(jìn)程(Empty Process), 不含Android 4大組件的進(jìn)程。
按照Android的設(shè)計, app只能提高自己的進(jìn)程優(yōu)先級, 降低被殺掉的概率。
我們更關(guān)心的是進(jìn)程被干掉后怎么拉起來, 有如下幾個方法:
1、 注冊靜態(tài)BroadcastReceiver, 監(jiān)聽系統(tǒng)廣播;
2、 啟動一個服務(wù), 并覆蓋Service的onStartCommand函數(shù), 返回Service.START_STICKY。 用處是被gc回收后在以后某個時間被系統(tǒng)拉起來, 然并卵, 并不是我們想要的。
3. 使用Native進(jìn)程?;睿?nbsp;Android5.0以下好用, 在Android5.0以上就廢了, 所以不細(xì)說了。
4. 使用JobSheduler機(jī)制?;睿?nbsp; 上帝在關(guān)閉一扇門的時候(native進(jìn)程?;顝U棄了),打開了一扇窗(JobSheduler替代了native進(jìn)程方式)。
5. 家族系app互拉, 例如百度旗下所有app, 啟動其中一個app時, 它會拉起百度旗下其他app進(jìn)程。作法很流氓, 也是廠商和用戶深惡痛絕的。
以下是參考代碼, 只是為驗證進(jìn)程能自啟, 所以寫的很簡單
public class MyJobService extends JobService { @Override public void onCreate() { super.onCreate(); startJobSheduler(); } public void startJobSheduler() { try { int id = 1; JobInfo.Builder builder = new JobInfo.Builder(id, new ComponentName(getPackageName(), MyJobService.class.getName() )); builder.setPeriodic(500); //間隔500毫秒調(diào)用onStartJob函數(shù), 500只是為了驗證 JobScheduler jobScheduler = (JobScheduler)this.getSystemService(Context.JOB_SCHEDULER_SERVICE); int ret = jobScheduler.schedule(builder.build()); } catch (Exception ex) { ex.printStackTrace(); } } @Override public boolean onStartJob(JobParameters jobParameters) { Log.d("brycegao", "onStartJob alive"); return false; } @Override public boolean onStopJob(JobParameters jobParameters) { Log.d("brycegao", "onStopJob alive"); return false; } }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。