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被拉起的现象

   

    


     

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