我听说后台服务在Android Oreo上免费工作。 我有点困惑,我应该如何重写我的代码。 我现在和Android一起工作了一个月左右,所以请尝试一下 回答尽可能简单。
我有一个名为On Boot的服务和我的MainActivity的onCreate()
。
在服务的onStartCommand
中,它正在调用Handler
。
这个处理程序每隔半分钟就会postDelay()
一次并调用一个函数。
此函数执行一些api请求,并在应用某些条件时发送通知。
让这段代码在android O +上工作的最佳方法是什么?
我考虑使用Foreground Service并显示无用的ongoing
通知,用户可以制作
看不见但这个想法听起来不太好。
答案 0 :(得分:1)
这个处理程序将每半分钟postDelay()并调用一个函数
这在Android 6.0+上无法可靠运行,由Doze模式和app待机提供。特别是在几乎任何地方工作都会对电池造成不利影响,因此Google会竭尽全力防止这种行为。
让这段代码在android O +上工作的最佳方法是什么?
最好的办法是完全摆脱它。使用JobScheduler
并减少定期工作(例如,每15分钟一次)。
使用前台服务将使您的应用在Android 8.0及Android 6.0+上的运行方式(即,仍然不可靠,但至少工作超过一分钟)。
我考虑过使用Foreground Service并显示无用的持续通知,用户可以隐身但这个想法听起来不太好。
发出有用的通知,允许用户控制服务的行为。
答案 1 :(得分:0)
使用GcmNetworkManager。您可以使用更频繁的间隔设置定期任务。由于它使用了与api级别不同的结构,因此你可能对oreo没有任何问题。