【问题标题】:Android: What is the best way to make repetitive Background Tasks Android Oreo ready?Android:准备好重复的后台任务 Android Oreo 的最佳方法是什么?
【发布时间】:2017-08-25 17:12:02
【问题描述】:

我听说后台服务无法在 Android Oreo 上免费运行。 我有点困惑我应该如何重写我的代码。 我正在使用 android 一个月左右,所以请尝试 尽可能简单地回答。

我有一个名为 On Boot 的服务,位于我的 MainActivity 的 onCreate() 中。 在服务的onStartCommand 中,它正在调用Handler。 此处理程序将每半分钟postDelay() 本身并调用一个函数。 该函数会做一些 api 请求,并在应用某些条件时推送通知。

让这段代码在 android O+ 上运行的最佳方式是什么?

我考虑过使用前台服务并显示一个无用的ongoing 通知,用户可以使 隐形,但这个想法听起来不太好。

【问题讨论】:

标签: android android-8.0-oreo


【解决方案1】:

此处理程序将每半分钟发布一次延迟()并调用一个函数

由于打盹模式和应用待机,这在 Android 6.0+ 上无法可靠运行。尤其是在几乎如此频繁的地方工作对电池不利,因此 Google 将竭尽全力防止这种行为。

让这段代码在 android O+ 上运行的最佳方式是什么?

最好的办法是彻底摆脱它。使用JobScheduler 并减少定期工作(例如,每 15 分钟一次)。

使用前台服务将使您的应用在 Android 8.0+ 上的行为方式与在 Android 6.0+ 上的行为方式相同(即,仍然不可靠,但至少可以运行超过一分钟)。

我考虑过使用前台服务并显示一个无用的持续通知,用户可以使其不可见,但这个想法听起来不太好。

发出有用的通知,允许用户控制服务的行为。

【讨论】:

  • 感谢您的回答!我发现 Android N 不允许 Scheduled Jobs,定期
  • @Max:AFAIK 这个区域没有变化。频繁的周期性工作是电池消耗的主要来源,这就是谷歌不赞成它的原因。
【解决方案2】:

使用 GcmNetworkManager。您可以设置更频繁的间隔定期任务。由于它在 api 级别使用不同的结构,因此您可能对 oreo 没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2015-10-01
    • 2015-08-17
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多