我目前正在更新一个应用程序,它有以下工作流程:
onMessageReceived
函数,我们还触发了与Firestore数据库的同步。不过,我的理论是,当Android进入Doze模式时,步骤4会出现一个错误;因此,该设备无法与Firestore同步,因此该应用程序将为用户崩溃。目前大约有20%的用户正在发生这种情况。
然后我发现了Workmanager,我相信它可以帮助解决这个问题。不过,我对这件事还是很陌生的。我在想一个解决方案可以是:我专门创建了一个WorkRequest,其中有一个约束,说明设备应该连接到互联网上。在这个WorkRequest中,我将执行数据库同步,并向用户显示通知。
然而,这可能会导致一些延迟,因为这取决于用户何时将他们的设备连接到互联网。理想情况下,我认为最好的解决方案应该是类似于描述的这里。最后,在我的例子中,同步(计划作业)是由外部事件(FCM)触发的,但是我很难理解这是否真的是最好的解决方案。
你认为如何?第一个解决办法是好的吗?如果第二个是更好的,那么您是否有一个关于代码外观的示例(基本上是一个框架,这样我就可以理解如何将WorkManager与FCM联系起来)?或者,工作经理可能不是解决这个问题的最佳方案吗?
非常感谢!
发布于 2022-05-12 08:16:42
请在此阅读:
https://developer.android.com/topic/performance/appstandby
在这里:
https://firebase.google.com/docs/cloud-messaging/concept-options#setting-the-priority-of-a-message
但是长话短说--如果你使用push --你需要对消息赋予很高的优先级,这样用户就会与他们进行交互,这将把应用程序转移到活动桶中。这甚至可以在打瞌睡模式下工作。
但是,如果没有用户交互:
所以基本上这是我的建议:
同时,要记住,当你收到下一次的推动时,可能会有未完成的工作。因此,寻找链接作品和独特的作品。
例如,您可能只想要一件作品,并且使用“唯一”--您可以替换旧的作品,甚至可以将新的作品附加到其中。检查这里:
我建议你看这张播放列表。最后,也有一个问题与男人的背后的WM。你会理解你所需要的大部分东西:
https://stackoverflow.com/questions/72193282
复制相似问题