进程的保活,在很多资讯类的App和即时通讯App的用处很大,奈何谷歌的推送服务在国内是被阉割了!据说是在8.0(奥利奥)相关政府机构已经将开放这项功能提上了日程,嗯,没错8.0,预计再过三五年就可以像苹果那样自由自在的推送了!但是一点不鸡冻,不知道我这秃头的码农还能不能挨到,哈哈!
先看看效果图:
这张图片的主要操作是杀死后台所有的应用进程,之后在状态栏上面弹出被拉起来的程!
测试机参数:
service:是一个后台服务,专门用来处理常驻后台的工作的组件。
一、优先级
进程的重要性优先级:(越往后的就越容易被系统杀死)
1.前台进程;Foreground process
1)用户正在交互的Activity(onResume())
2)当某个Service绑定正在交互的Activity。
3)被主动调用为前台Service(startForeground())
4)组件正在执行生命周期的回调(onCreate()/onStart()/onDestroy())
5)BroadcastReceiver 正在执行onReceive();
2.可见进程;Visible process
1)我们的Activity处在onPause()(没有进入onStop())
2)绑定到前台Activity的Service。
3.服务进程;Service process
简单的startService()启动。
4.后台进程;Background process
对用户没有直接影响的进程—-Activity出于onStop()的时候。
android:process=”:xxx”
5.空进程; Empty process
不含有任何的活动的组件。(android设计的,为了第二次启动更快,采取的一个权衡)
好了,基础知识回顾的差不多了!进入正题吧!
事先声明哈!其实是没有真正的进程的保活的,在手动杀死后台的时候,运行在系统后台的所有进程都是一一被杀死的,注意的是,一个一个被杀死的,所以我们才利用这个特性来做的!额。。中心思想即是,在应用被打开的时候,启动两个后台服务,这两个后台服务是相互依存的,也就是说,当一个进程被干掉的时候,另一个存活的进程就立马将其拉起唤醒,也就是打一个时间差!
嗯,上代码!
远程服务代码:
本地服务代码:
JobService保证在息屏后,CPU进入休眠状态时进行唤醒
AIDL定义
我们再在MainActivity中进行调用:
OK,所有代码基本在这了!哈哈!有问题的话留言交流!
每天进步一点点,时间会让你成为巨人!
登录 | 立即注册