Android系统在内存不足会将进程杀死,诸如360等清理软件也会将进程杀死,各厂商定制的后台管理机制也可能会将进程杀死,推送服务面临的威胁如此之多,如何维持推送服务不死也是一大难题。
Android内存回收机制
Android系统将进程按照优先级,从高到低划分为5类:
1、前台进程
(1)Activity正在与用户进程交互(Activity的onResume已经被调用)
(2)与正在和用户交互的Activity绑定的Service
(3)Service运行在前台——Service中调用了startForeground函数
(4)Service正在执行生命周期回调函数(onCreate,onStart,onDestory)
(5)BroadcastReceiver正在执行onReceive方法
2、可视进程
(1)Activity没有运行在前台,但是用户仍然可见(它的onPause方法被调用),例如:当前台Activity启动了一个Dialog,这样Dialog运行在前台,Activity仍然可见,属于可视进程。
(2)与一个可视的Activity绑定的服务所在的进程
3、服务进程
进程中运行着被startService()启动的服务,并且没有进入上面1中(3)、(4)这两种情况。
4、后台进程
没有可见的Activity,并且没有运行中的服务
5、空进程
没有包含活动应用组件的进程为空进程,也就是进程的应用组件已经运行完毕。
每个进程都持有一个adj值,优先级越高的进程持有的adj值就越小。Android内核中的low memory killer会依据这个值来选择杀死哪些进程,比如当内存小于X时,杀死adj值大于Y的进程,前台程序的adj值为0,这意味着它不会被系统杀死。
关于消息推送服务,想要了解更多也可以咨询极光。
极光推送官方链接:https://www.jiguang.cn/push
0条评论