gpt4 book ai didi

android - 我需要停止周期性的 GcmTaskServices 吗?

转载 作者:行者123 更新时间:2023-11-30 01:44:22 25 4
gpt4 key购买 nike

我正在尝试使用 GcmNetworkManager API(自 Google Play Services 7.5 起存在)实现一个 PeriodicTask

我的任务在我的应用程序启动后立即安排,并将检查对象的 Queue 内容,以便将它们作为批处理发送到我的服务器。如果队列为空,onRunTask() 方法几乎什么都不做(它将检查队列并返回 GcmNetworkManager.RESULT_SUCCESS)。


我在实现中放置了一些日志并注意到 PeriodicTask 一直在运行,即使我的应用程序处于后台或从内存中删除也是如此。

这让我担心用户的电池。尽管我不会执行任何繁重的任务或 HTTP 请求,但该过程会在没有真正需要的情况下定期启动。

起初,我认为 GcmNetworkManager 以指数方式后退我的 Task 直到它停止(或者我做错了什么阻止了它)会很聪明,但是,正如我的日志显示的那样,这并没有发生。

之后,我尝试使用 cancelTask​​()cancelAll() 但如果从 Task 中调用它们,它们将不起作用onRunTask() 方法本身。即使调用 stopSelf() 也不是一个好主意,因为 GcmNetworkManager 负责 Service 生命周期,所以我不想进入方式。

实际完成任务的难度让我思考这是否是正确的方法(也许我应该让 Task 永远存在?)。


如何在不耗尽用户电池的情况下正确使用 PeriodicTask

最佳答案

首先,你真的需要周期性的任务执行吗?听起来你可以用 updateCurrent 注册 OneoffTask每当您更新队列时。如果上传失败,可以使用RESULT_RESCHEDULE稍后重试(Google Play 服务将采用指数退避策略来决定何时重试)。

我不知道你的要求,所以你可能真的需要 PeriodicTask。如果是这样,您不必太担心电池。 GcmNetworkManager 的想法是,您让 Google Play 服务处理任务执行,因此它可以同时执行多个任务。

手机在将状态从非 Activity 状态变为 Activity 状态时会消耗电池电量(参见例如 https://www.youtube.com/watch?v=-3ry8PxcJJA ),因此只要您的工作与其他任务一起批量执行并立即完成您的工作,就不会浪费太多电量.您可以配置 executionWindow鼓励批处理。

关于android - 我需要停止周期性的 GcmTaskServices 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33945161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com