1

在我的 Android 项目中,我创建了一个带有服务的自定义时钟小部件,其中包含广播接收器的实例和意图过滤器。每次到达 ACTION_TIME_TICK 时,广播接收器都会提供小部件的更新。当在 gradle 中将 targetSdkVersion 设置为 25 时,这非常有效。但是,如果我以 sdk 27​​ 为目标,则服务会在几分钟后停止。我已阅读有关 Android O 中后台执行限制的文档,但我找不到任何对我的项目有用的方法。你有什么建议吗?

4

1 回答 1

0

您可以尝试一些事情,当它们一起使用时,应该能够切断所有空闲/待机/打盹模式(无论操作系统版本如何)。

  1. 使用 aWakefulBroadcastReceiver而不是普通的BroadcastReceiver. 确保您包含WAKE_LOCK正确使用它的权限。
  2. 使用setExactAndAllowWhileIdle()方法(在 API 23 及以上)为接收者安排 Intent:

    if (Build.VERSION.SDK_INT < 23) {
        if (Build.VERSION.SDK_INT >= 19) {
            setExact(...);
        }
        else {
            set(...);
        }
    }
    else {
        setExactAndAllowWhileIdle(...);
    }
    
于 2018-04-10T14:08:11.440 回答