Android -- 保活方案

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android -- 保活方案相关的知识,希望对你有一定的参考价值。

参考技术A 1、前台进程:当前运行的进程,除非APP的内存超过系统给定的最大内存,导致OOM才会被杀掉
2、可见进程、服务进程:当前可见、运行的音乐这种
3、空进程:给新打开的APP使用,优先级最低

Service 的启动方式有两种,一种是startService(),一种是bindService().这两种方式有有什么区别.

startService(),启动完之后该service就在后台运行,其生命周期跟启动它的Context没有任何关系。也不能跟Context通讯。
bindService()启动之后生命周期跟启动它的Context有关,比如Activity、fragment、service等。在Context中解绑之后,如果改Service没有任何绑定后该Service也就结束。

Service 的生命周期跟启动方式有关。
stratService的生命周期: onCreate() -> onStartCommand() -> onDestroy()
bindService的生命周期: onCreate() -> onBind() -> onUnbind() -> onDestroy()

1.PARTIAL_WAKE_LOCK:保证CPU保持高性能运行,而屏幕和键盘背光(也可能是触摸按键的背光)关闭。一般情况下都会使用这个WakeLock。

2.ACQUIRE_CAUSES_WAKEUP:这个WakeLock除了会使CPU高性能运行外还会导致屏幕亮起,即使屏幕原先处于关闭的状态下。

3.ON_AFTER_RELEASE:如果释放WakeLock的时候屏幕处于亮着的状态,则在释放WakeLock之后让屏幕再保持亮一小会。如果释放WakeLock的时候屏幕本身就没亮,则不会有动作。

1.PARTIAL_WAKE_LOCK:保证CPU保持高性能运行,而屏幕和键盘背光(也可能是触摸按键的背光)关闭。一般情况下都会使用这个WakeLock。

2.ACQUIRE_CAUSES_WAKEUP:这个WakeLock除了会使CPU高性能运行外还会导致屏幕亮起,即使屏幕原先处于关闭的状态下。

3.ON_AFTER_RELEASE:如果释放WakeLock的时候屏幕处于亮着的状态,则在释放WakeLock之后让屏幕再保持亮一小会。如果释放WakeLock的时候屏幕本身就没亮,则不会有动作。

对于 API level < 18 :调用startForeground(ID, new Notification()),发送空的Notification ,图标则不会显示。
对于 API level >= 18:在需要提优先级的service A启动一个InnerService,两个服务同时startForeground,且绑定同样的 ID。Stop 掉InnerService ,这样通知栏图标即被移除。

该方案过于流氓,而且效果不好,所以不写。

JobSchedule 允许在特定状态与特定时间间隔周期执行任务。我们可以利用它的这个特点来完成保活功能,效果就像开启一个定时器,与普通定时器不同的是其调度由系统来完成。

在发送特定系统事件时,系统会发出广播,通过在AndroidManifest中静态注册对应的广播监听,即可在发送响应事件时拉活。
但是Android7.0开始,对广播进行了限制,而且在8.0更加严格。

Android8.0开始对广播有了限制:很多隐式广播接收器不能在清单中静态注册。但清单注册广播接收器仍是可以的(豁免广播或自定义广播-注意,自定义广播要显式发送)。实现隐式广播(系统广播)的接收也是可以的,但只能通过动态注册来实现了。

有多个app在用户设备上安装,只要开启其中一个, 就可以将其他的app也拉活。

具体实现: https://blog.csdn.net/crazymo_/article/details/83026230

一、系统同步机制拉活

以上是关于Android -- 保活方案的主要内容,如果未能解决你的问题,请参考以下文章

2018年Android的保活方案效果统计

2018年最新Android的保活方案及效果统计

Android后台进程保活方案

2018年Android的保活方案效果统计

2018年Android的保活方案效果统计

Android 进程保活