应用程序在后台运行时将事件存储到数据库

问题描述 投票:0回答:2

我希望我的应用程序将事件(由SDK激发)存储到数据库(使用领域),即使应用程序在后台也是如此。我的概念是使用一个服务来进行一些SDK初始化和监听事件。通过在我的自定义应用程序类的onCreate()方法中启动此服务,我想确保在应用程序处于后台时服务保持活动状态,这样我就不会错过任何要存储到数据库中的事件。

但现在因为不再允许Android 8后台服务。但我不想使用Foreground Service,因为我需要显示通知。我不希望用户知道事件存储在后台的数据库中。我认为这些信息对普通用户来说是技术性的。

Application.onCreate()想要启动服务但是抛出异常时我意识到了这个问题:

引起:java.lang.IllegalStateException:不允许启动服务Intent {cmp = my.package.name.debug / my.package.name.service.MyService}:app在后台uid UidRecord {94b2e4a u0a204 SVC空闲更改: idle | uncached procs:1 seq(0,0,0)}

值得注意的是,如果我终止了我的应用程序的任务,则抛出异常。因此,如果我杀了应用程序,就会调用Application.onCreate()

最后,我不确定服务是否适用于我的用例。

我有两个问题:

  1. 如果我的应用程序在后台,如果我想将事件存储在数据库中,还可以使用哪种组件?
  2. 为什么杀死应用程序触发应用程序的onCreate()
android realm android-service foreground-service android-application-class
2个回答
0
投票

您可以根据具体情况使用workmanager

它可以满足您的所有要求,即使应用程序在后台或设备重新启动,它也能保证执行。

有关WorkManager Api的更多信息,请查看this (link to example code for WorkManager)


0
投票

我找到了与我的第二个问题相关的答案:

我使用Service.START_STICKY开始我的服务。如果该应用程序被杀死,该服务也将被杀死。粘性服务如果被杀死则会重新创建。并且因为Application类在我的情况下启动了Service,所以也重新创建了Application。但仍然应用程序处于后台,然后我遇到应用程序的onCreate()和应用程序崩溃,因为奥利奥不允许在应用程序处于后台时启动任何服务。

编辑:

回答我的第一个问题:在Android的官方文档中阅读更多内容后,我得出以下结论:这里的前台服务似乎是错误的选择,因为用户不需要知道存储在DB中的事件。 JobScheduler(或更新的Workmanager)更适用于一次性或定期作业。因此,混合启动/绑定服务似乎是正确的选择。

© www.soinside.com 2019 - 2024. All rights reserved.