android系统应用保活_Android应用保活实践

最近做了一个包含即时通讯功能的应用。即时通讯IM功能需要应用实时在线,即使是在后台或者在熄屏状态下。为了让应用实时在线,采取了以下三步:

操作一:启动前台服务startForegroundService提高系统优先级。

启动前台服务,调用startForegroundService去启动一个service。在该service的onStartCommand方法中,调用startForeground启动一个前台通知。注意调用方法startForegroundService和startForeground应判断当前设备的版本是不是大于等于Android O,大于等于Android O才有前台服务。判断方法如下:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
           startForegroundService(service);
        }

做了上述操作后,在手机上应用保活经测试基本上没有问题。可以一直有常驻通知。但是在荣耀10手机上发现,熄屏一分钟左右,很快就与服务端的心跳断了。就处于离线状态。经分析后本人认为,虽然应用没有被杀掉,但是进入了一种相当于休眠的状态,熄屏后很快就不能再网络操作如何在后台保持网络操作呢?于是就有了操作二。

操作二:用Intent引导用户允许应用在后台运行

如果不用intent引导,而只是告知用户去设置->电源中去授权应用在后台运行,也能达到保活效果,但是就会导致用户寻找成本,使用成本大大增加。这里我们还是推荐通过intent的方式帮助用户快速设置。

 Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
            intent.setData(Uri.parse("package:" + activity.getPackageName()));
            activity.startActivity(intent);

注意,上述引导方法需要判断用户手机版本是否大于等于Android M.

增加上述操作引导后,用户就可以很容易的设置忽略电池优化,允许应用在后台运行。加上操作二之后,在荣耀10手机上测试,没有再发现熄屏后掉线的问题。

本来以为以上两个步骤已经OK了。但是实际运行发布过程中,发现我还是太年轻。在红米Note8 pro上可以了。但是在华为手机上一断开数据线很容易掉线。华为手机需要在手机管家-应用启动管理中,将自己的应用的自动管理开关关闭,使用手动管理。同时打开允许后台活动的开关。如下图。

2c7855db97cf7103495700b3df341fc9.png

加上上述设置后,在华为手机上可以正常保活。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值