首页 > 解决方案 > 应用程序关闭后也经常运行服务

问题描述

对于我的应用程序,我想在后台从服务器获取数据。当用户想要收到有关特定更改的通知时,我希望我的应用程序即使在应用程序关闭时也能继续获取数据。我正在研究这个主题,发现在应用程序关闭后继续运行服务的可能性随着 Android Oreo 的变化而改变。我没有看到使用较新版本的 android 在后台处理运行服务的替代方法。我看到的最推荐的解决方案是使用前台服务。但由于我没有任何用户交互,我认为这个解决方案并不完美。我还阅读了有关 WorkManager 的信息,但不幸的是它的最短时间间隔为 15 分钟。除了前台服务和 WorkManager,还有其他替代方案可以在后台连续处理数据吗?

标签: javaandroidandroid-service

解决方案


您不需要“用户交互”来拥有前台服务,您需要的是在服务处于前台时无法删除的通知。

如果您的通知上下文是服务本身,则点击通知会将用户带到他/她可以强制关闭服务的“设置”)。

您可以在 BOOT_COMPLETED 广播接收器中启动 FG 服务。您必须快速(5 秒或更短)将其发送到前台,否则 android 会抛出异常。不幸的是,有一个错误,谷歌认为它没问题并关闭为“不会修复”,但你仍然需要解决。

长话短说,在你的服务中有一个 onCreate :


    @Override
    public void onCreate() {
        super.onCreate();

        final Notification notification = createNotification();
        startForeground("SOME_UNIQUE_ID", notification);
    }

您明白了(这createNotification()就是您想要创建频道(如果 O+)+ 通知的任何内容。

然而,这一切都很好,但它会一直运行一个服务,这可能不是你应该做的。

您可以使用警报触发更有效的(就范围而言)意图服务来完成工作,安排另一个警报,例如 5 分钟,然后再做一次。

或者 - 如评论 - 您可以使用 Firebase 和通知来对更改做出反应。

总而言之,这些都是选项。

我想说的是,除非你真的需要“实时”更新,否则 WorkManager 的 15 ~ 通常是可以的,如果你可以处理你必须将代码设计得非常独立的事实,因为 WorkManager 无法接收太多信息并且有些东西用起来很痛苦……


推荐阅读