替换我的(资源密集型)服务

时间:2017-09-19 09:13:03

标签: android android-service firebase-job-dispatcher

我有一个应用程序可以在通知中显示新数据。该数据由网络设备提供。我可以查询此设备并将其与我服务中的缓存数据进行比较,以确定是否需要更新通知。我的应用程序有一个服务,其中包含用于缓存数据的局部变量。如果设备具有较新的数据,我会在向用户发出通知时将其显示。现在我开始得到IllegalStateException,因为当应用程序处于后台模式时,Android O不允许调用startService()。我知道我可以在Foreground模式下启动服务,但由于Android提供的资源密集程度较低,我想尝试一些新的东西。在缓存在局部变量中的数据旁边,它将存储在Firebase数据库中。

我的要求:

  1. 每10秒检查一次(如果屏幕已开启)是否有新数据
  2. 检查屏幕开启时是否有新数据
  3. 如果有新数据,请更新通知
  4. 需要长时间运行,并能够将新数据与旧数据(缓存或来自firebase)数据进行比较。
  5. 可以在应用处于后台模式时运行
  6. 我的想法: 我查看了Firebase工作调度员(https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-)。也许我可以将其配置为每次打开屏幕时运行,并且每10秒钟从网络设备检索新数据并将其与Firebase数据库中的数据进行匹配。但是,经常查询数据库可能会花费很多性能。

2 个答案:

答案 0 :(得分:0)

尝试基于对象的数据库,如Realm,SnappyDB(Uber使用它)等。 查询非常快

答案 1 :(得分:0)

通过保留我的服务来解决这个问题。 Android Oreo迫使我使用不同的服务。只是一个简短的描述,以防任何人需要它:

  1. 只要可以连接到网络设备,我的服务就会进入前台模式。
  2. 当无法连接到网络设备时,服务停止。同时安排Firebase Jobdispatcher作业。
  3. 当jobdispatcher运行作业时,它会查看是否可以连接到设备。如果是真的 - >服务启动并将自己推向前台。
  4. 该服务仍然保持与网络设备的连接,并保存通知所需的对象。