利用系统设置+wakeLock,实现后台保活

利用系统设置,实现后台保活

随着android系统和手机厂商的不断完善,后台保活越来越难搞;但总有办法利用一些小技巧可以实现后台保活。

相信你也看了不少关于保活的文章,各种技术五花八门,我这种小菜鸟只能仰望;还有热心大佬把各种技术总结到一块https://github.com/xingda920813/HelloDaemon;

公司项目是做VOIP的,每隔50s需要向SIP服务器发送register信息,用户反映熄屏几分钟就接不到电话了,sip服务器已经是unregister状态了,说明熄屏后应用没有在发送register信息。

好了,开始研究。。。

不知道大家有没有用过跑步类应用,这里以keep举例,我在用keep跑步时,听着歌,熄屏后手机装口袋里,本来跑5km,跑到3km时应用被杀死了,后面两公里没有计算上,那我TM还怎么发朋友圈装B?好在Keep有解决方案,引导用户去运动权限设置里开启后台保护设置和防睡眠设置,点击后台保护设置跳转到了应用自启管理
利用系统设置+wakeLock,实现后台保活_第1张图片
找到办法了,咱们就试一试。。。

通过 adb shell dumpsys activity activities命令,查到自启界面是:com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity(华为荣耀v9);
手动管理 打开 允许后台运行
利用系统设置+wakeLock,实现后台保活_第2张图片
搞定,测试。。。 home键去后台,锁屏。。。

5分钟。。。没问题
10分钟。。。还在运行
30分钟。。。仍旧在运行

but,电话还是收不到,这又是为什么呢?
怀疑是熄屏后网络断开,锁屏后保持网络连接 也开着呢,因为连得是wifi,就用了wifilock测试下,wifiLock可以在熄屏后持有wifiLock的应用依旧保持网络连接,发现没用。。

到底是不是断网的原因呢? 用TCP测试一下吧,百度TCP,ctrl c +v ,搞定。。至于服务端,使用网络调试助手作为TcpServer,每个5s发送一次

2019-10-29 12:39:47.755]# RECV ASCII FROM  >
发送心跳包:3685s

[2019-10-29 12:50:22.226]# RECV ASCII FROM >
发送心跳包:3685s

[2019-10-29 12:51:09.039]# RECV ASCII FROM >
发送心跳包:3690s

[2019-10-29 13:03:47.860]# RECV ASCII FROM >
发送心跳包:3690s

发现熄屏后确实是断了,应该是休眠了,10分钟才发一次这是什么鬼

休眠了,那怎么搞?那就不让他休眠 wakeLock

Intent.ACTION_SCREEN_OFF
Intent.ACTION_SCREEN_ON

这俩个广播大家都熟悉,熄屏,亮屏,熄屏是持有wakeLock,亮屏时release,有点太暴力了。。
没办法,为了解决问题,就这么滴吧

测试。。。又出问题了,红米Note8,能收到来电,但是弹不出接听电话的界面。。。
原来小米有自己独有的权限,允许后台弹出界面的权限,不光小米有,vivo、魅族好像都有,华为暂时没发现。。这个只能应用启动时弹出dialog去引导用户去设置了

好了,到这里就结束了,总结一下就两点
1、引导用户开启允许后台运行
2、锁屏时持有wakeLock,亮屏时释放

如果有后台弹出界面的需求,还需开启相应的权限,判断有没有这个权限的办法,目前只有小米测试的可以,其他手机的没找到;

还有一点就是容易高耗电提醒,不过微信使用中,也会时常有高耗电的提醒,也不用太在意,在意的话就把高耗电提醒关掉。

你可能感兴趣的:(android,sip)