Android进程保活相关实践

最近测试APP时接到个需求:1像素保活

打眼一看,应该跟安卓进程有关系,索性找点详细的资料来了解下:

系统什么时候杀掉一个进程?为什么杀掉这个进程?怎样最大程度保活一个进程?详细的讲解可以参考这个链接------https://www.cnblogs.com/Doing-what-I-love/p/5530291.html

大概的意思是,安卓系统中所有的应用程序进程及系统服务进程(SystemServer)都是由Zygote进程fork出来,而这个SystemServer负责启动系统中的2个重要服务PackageManagerService和ActivityManagerService。当ActivityManagerService启动一个应用程序的时候会通过Socket与Zygote通信,fork一个子进程作为即将启动的应用程序的进程;而应用程序进程启动过程,指定新的进程的入口函数是ActiveThread的main函数,为进程内的Binder对象提供了Binder进程间通信机制的基础设施(Binder线程池)

就是这样了。

Android的内存回收机制(Low Memory Killer)------Linux的是(Out of Memory Killer)

1,进程的oom_adj值由ActivityManagerService根据运行在进程里面的组件的状态来计算

2,进程的oom_adj的取值范围[-16,15],值越小,表示越不容易杀死

3, 内存紧张时,LMK根据oom的值来决定回收哪个进程

4,PackageManagerService和ActivityManagerService在特定情况下也会进行进程回收

5,LMK回收策略,当系统内存小于i时,在oom值大于等于j的进程中,选择一个oom值最大且消耗内存最多的进程来回收

应用程序进程的oom_adj值

  SYSTEM_ADJ(-16):System Server进程
  PERSISTENT_PROC_ADJ(-12):android:persistent属性为true的系统App进程,如PhoneApp
  FOREGROUND_APP_ADJ(0):包含前台Activity的进程
  VISIBLE_APP_ADJ(1):包含可见Activity的进程
  PERCEPTIBLE_APP_ADJ(2):包含状态为Pausing、Paused、Stopping的Activity的进程,以及运行有Foreground Service的进程
  HEAVY_WEIGHT_APP_ADJ(3):重量级进程, android: cantSaveState属性为true的进程,目前还不开放
  BACKUP_APP_ADJ(4):正在执行备份操作的进程
  SERVICE_ADJ(5):最近有活动的Service进程
  HOME_APP_ADJ(6):HomeApp进程
  PREVIOUS_APP_ADJ(7):前一个App运行在的进程
  SERVICE_B_ADJ(8):SERVICE_ADJ进程数量达到一定值时,最近最不活动的Service进程
  HIDDEN_APP_MIN_ADJ(9)和HIDDEN_APP_MAX_ADJ(15):含有不可见Activity的进程,根据LRU原则赋予[9,15]中的一个值
  Init进程的oom_adj值被设置为-16,由Init进程所启动的daemon和service进程的oom_adj值也等于-16
  如果运行在进程A中的Content Provider或者Service被绑定到进程B,并且进程B的oom_adj值比进程A的oom_adj小,那么进程A的oom_adj值就会被设置为进程B的oom_adj值,但是不能小于FOREGROUND_APP_ADJ
  一遍操作后,也只能看见几个值,其他的就参考吧。

ActivityManagerService在以下几种情况下会更新oom值:

  1,停止Activity

  2,设置进程数量限制

  3,注销Broadcast Receiver

  4,结束Broadcast Receiver

  5,WindowManagerService在处理窗口的过程中发生Out Of Memroy时,也会通知ActivityManagerService杀掉那些包含有窗口的应用程序进程

用待测的app查看了下oom的值,具体显示如下:(进shell,查看对应app的进程id,根据id查看对应的oom值)

加上了1像素保活的功能后,又重新试了下各个情况的oom值:

切后台锁屏后跟前台展示值相同,都为0

按home键查看值为2,已经看不到7和9的值了

初步判断设置成功

剩下的问题就是分析下log中activity的生命周期了

猜你喜欢

转载自www.cnblogs.com/zhang007/p/9952661.html