Android 程序在後臺保活


關於android進程:

1.前臺進程(Foreground process) 

2、可見進程

3、服務進程

4、空進程


要避免被回收,首先就要提高進程級別。

在Android中,即使當用戶退出應用程序之後,應用程序的進程也還是存在於系統中,這樣是爲了方便程序的再次啓動,但是這樣的話,隨着打開的程序數量的增加,系統的內存會變得不足,就需要殺掉一部分進程以釋放內存空間。至於是否需要殺死一些進程和哪些進程需要被殺死,是通過Low Memory Killer機制來進行判定的。

Android Low Memory Killer


1、oom_adj

     oom_adj 的值越小, 就越不容易被後臺回收

     

static final int PERCEPTIBLE_APP_ADJ = 2;  
  
// This is a process only hosting activities that are visible to the  
// user, so we'd prefer they don't disappear.  
// ZMS:此進程僅僅擁有用戶可見的Activity,所以我們不希望它消失。  
static final int VISIBLE_APP_ADJ = 1;  
  
// This is the process running the current foreground app.  We'd really  
// rather not kill it!  
// ZMS:前臺應用進程。最好不要殺掉它!  
static final int FOREGROUND_APP_ADJ = 0;  

    所以爲了能夠在後臺鎖屏情況下,對於一些特殊應用,比如記錄軌跡, 爲了使APP不被殺死,應當儘量減少oom_adj的值

    查看oom_adj :

    adb shell

    ps  yourapp.package.name      // get the pid

    cat /proc/pid_value/oom_adj


2、內存、電量

    在後臺,當多個app 的 oom_adj 值保持爲一致的時候 , 部分手機廠商會根據內存和電量使用情況對app進行回收。 目標就是內存越小越好、電量越低越好

    電量優化: 1、減少wake lock 喚醒   2、減少alarm的喚醒      參考: Android應用的電量消耗和優化的策略



3、與廠商合作, 進入白名單


4、關於拉活
       a.  jobService  在android5.0以上的機型  ,測試過部分機型,使可以拉活的, 小米、華爲測試需要開啓後臺啓動權限後,才能正常拉活

            JobService和JobScheduler機制在Android5.0以上保活

       b. accountSyncManager   幾乎大部分機型 基本是都可以實現。但是拉活週期在部分手機上表現不同, 有的需要1小時甚至更久

            在Android中使用SyncAdapter同步數據全攻略

       c、接入第三方通訊SDK, 可以實現application被拉起的現象

   

    


     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章