Android-Daily-Interview icon indicating copy to clipboard operation
Android-Daily-Interview copied to clipboard

2019-07-16:Service如何进行保活?

Open Moosphan opened this issue 4 years ago • 11 comments

Moosphan avatar Jul 16 '19 01:07 Moosphan

保活不了,死球了

whatshappen avatar Jul 16 '19 01:07 whatshappen

做保活的都死球了,比如我

zhoulesin avatar Jul 16 '19 02:07 zhoulesin

评论我笑出猪叫

百度了下 思路无非是两种 1.提升service进程优先级 2.在service的生命周期内加以处理(重新创建或重新启动)

yangfanggang avatar Jul 16 '19 09:07 yangfanggang

利用系统广播拉活 利用系统service拉活 利用Native进程拉活<Android5.0以后失效> fork进行监控主进程,利用native拉活 利用JobScheduler机制拉活<Android5.0以后> 利用账号同步机制拉活

fenggeZhang avatar Jul 17 '19 05:07 fenggeZhang

  1. 开启一个像素的Activity进行保活
  2. 前台服务
  3. 用系统广播进行相互唤醒
  4. JobScheduler

18361237136 avatar Jul 18 '19 03:07 18361237136

1.设置Service优先级,setForground(true) 2.onStartCommand()方法返回START_STICKY 3.设置为系统级应用 4.在onDestory()方法中重新启动Service 5.开启单独的进程

IT666 avatar Sep 23 '19 07:09 IT666

评论我笑出猪叫

百度了下 思路无非是两种 1.提升service进程优先级 2.在service的生命周期内加以处理(重新创建或重新启动)

第二种保证不了系统回收

JarvisGG avatar Mar 02 '20 03:03 JarvisGG

诱导用户添加白名单 其他的基本都不现实,比如我手机上除了微信和网易云音乐加入白名单,其他(京东,淘宝,美团等)一键清理之后全部死翘翘

zizikoth avatar Apr 20 '20 06:04 zizikoth

保活基本实现不了了,pass

LillteZheng avatar Jun 17 '20 13:06 LillteZheng

现在系统只要一键清理掉应用 服务也会被清掉而且无法自启动 除非加入白名单

mlinqirong avatar Dec 14 '21 02:12 mlinqirong

1:跟各大系统厂商建立合作关系,把App加入系统内存清理的白名单

2:白色保活

用startForeground()启动前台服务,这是官方提供的后台保活方式,不足的就是通知栏会常驻一条通知,像360的状态栏。

3:灰色保活

开启前台Service,开启另一个Service将通知栏移除,其oom_adj值还是没变的,这样用户就察觉不到app在后台保活。 用广播唤醒自启,像开机广播、网络切换广播等,但在国产Rom中几乎都被堵上了。 多个app关联唤醒,就像BAT的全家桶,打开一个App的时候会启动、唤醒其他App,包括一些第三方推送也是,对于大多数单独app,比较难以实现。

4:黑色保活

1 像素activity保活方案,监听息屏事件,在息屏时启动个一像素的activity,提升自身优先级; Service中循环播放一段无声音频,伪装音乐app,播放音乐中的app优先级还是蛮高的,也能很大程度保活效果较好,但耗电量高,谨慎使用; 双进程守护,这在国产rom中几乎没用,因为划掉app会把所有相关进程都杀死。 3、实现过程:

1)、用startForeground()启动前台服务

前台Service,使用startForeground这个Service尽量要轻,不要占用过多的系统资源,否则系统在资源紧张时,照样会将其杀死。

DaemonService.java

可以参考下面的 Android实现进程保活方案解析

senlinxuefeng avatar Jan 11 '22 10:01 senlinxuefeng