进程保活方案

进程保活

一 内存阀值

概念:手机系统的进程退到后台不会被立即杀死,而是存到内存中,当内存达到一定数值时(其实就是达到内存阀值时)手机会依据自身的一套内存回收机制(low Memory Killer) 杀死进程。

二 adj值

概念:手机内存达到内存阀值时,系统会杀死优先级低的进程,linux系统会给每个进程分配一个数值,用以区分优先级,这个值便是adj值,adj值越小说明进程等级越高越不容易被杀死,反之越容易被杀死。

三 进程分类

1 前台进程 (Foreground process)

(1)用户正在使用的进程 交互的activity处于onresume()方法。
(2)某个进程持有一个Service,并且该Service与用户正在交互的 Activity绑定。
(3)某个进程持有一个Service,并且该Service调startForeground()方法使之位于前台运行。
(4)某个进程持有一个Service,并且该Service正在执行它的某个生命 周期回调方法,比如onCreate()、 onStart()或onDestroy()。
(5)某个进程持有一个BroadcastReceiver,且BroadcastReceiver正在执行其onReceive()方法。

2 可见进程(Visible process)

(1)拥有不在前台 但会用户可见的Activity(不可编辑 但可以看到 执行onPause() 但未执行onStop())
(2)拥有绑定到可见(或前台)Activity 的 Service

3 服务进程(Service process)

(1)进程中含有正在运行的Service 并且该服务是通过startService启动的

4 后台进程(Background process)

(1)退到后台 不可见的正在运行的进程

5 空进城(Empty process)###

(1)进程中没有任何“活跃”的组件

四 保活方案

这是只是降低进程的adj的值,未考虑进程占用内存的方案

1 一个像素的Activity

(1)创建一个只用一个像素大小的Activity 并设置透明
(2)创建一个BroadcastReceiver监听屏幕状态(是否锁屏)
(3)创建一个Service,放到一个独立进程(当前进程的私有进程 proecss:进程名)),开启新的进程已减少内存
(4)在服务中开启一个像素的Activity,监听到屏幕锁屏,可开启activity,解屏 在关闭activity

android5.0之前 手动将应用退出,ActivityMangerService在清理内存杀进程时,只会杀死主进程,不会杀掉子进程,但5.0之后会将主进程所带的自进程 统统杀掉 所以这种方案在5.0之前实用。

2 前台服务

(1)在API level < 18 时,在服务中调用startForground(Id,new Notification())发送一个空窗口,则图标不显示,让用户发现不了
(2)在API level >18 时,则在服务中创建一个子服务(也就是一个子类,也是一个服务) 然后两个服务一起发送具有相同的Id的startForground(id,new Notification()),然后子服务关闭notificaton同时关闭自己,这样主服务还在运行没有关闭,起到了前台服务的作用提高优先级

3 相互唤醒

例如腾讯系的微信和QQ 阿里系的支付宝、淘宝、天猫、UC 这些都可以相互唤醒

4 JobSheduler(作业调度)

1继承系统提供的JobService服务
2通过 JobInfo.Builder添加包名
3通过jobScheduler.schedule(builder.build())设置

api5.0以下通常用Native方式去感知主进程是否存活,感知的方案是轮训或者定时器,这是特别耗电的,5.0以后不支持native方式,所以改用JobShceduler代替。

5 粘性服务

1在Service中可以重写 onStartCommand方法 ,并且必须具有一个整形的返回值 ,如果服务被杀掉,则系统可以通过这个返回值判断来判断如何处理(重新开启服务还是不开启)

6 系统服务

1 继承系统的服务,比如消息通知服务,当有消息通知我们的服务可以接到 然后就可以从其拉起进程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值