黄芪

首页 » 常识 » 诊断 » Android应用保活实践
TUhjnbcbe - 2023/2/20 16:05:00
北京治疗白癜风技术哪家好 http://m.39.net/pf/a_4601359.html

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

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

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

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

}

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

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

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

Intentintent=newIntent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);intent.setData(Uri.parse(package:+activity.getPackageName()));activity.startActivity(intent);

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

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

操作一和操作二结合,本人在RedmiNote8Pro和荣耀10上测试通过应用的后台保活和网络访问。

1
查看完整版本: Android应用保活实践