- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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/
我已经完成了创建和启动计时器的手册页。 http://man7.org/linux/man-pages/man2/timerfd_create.2.html 但是,除了 arm(start) 和 di
我正在用 opengl 编写新的代码库,很早就遇到了一个奇怪的错误。这是帧速率的明显波动,具有重复性和可预测性。 我知道它肯定与渲染的对象成正比。它也与屏幕大小成正比(不是视口(viewport)大小
我知道如何使用计算数组中点之间的欧几里得距离 scipy.spatial.distance.cdist 类似于这个问题的答案: Calculate Distances Between One Poin
我想使用 CGAL 构造周期性 3D Delaunay 三角剖分和信息(在本例中为整数)。对于 2D,如果我构造一个 vector 对(点,信息)并将其传递给三角测量函数,则效果很好。然而,非常类似的
每隔几天,我们就会收到少量 MySql 超时错误,这些错误与我们的 MySQL RDS 实例上的 CPU 和数据库连接出现大量峰值相对应。这些查询通常非常快(<5 毫秒),但突然超时。 此时,数据库操
我是一名优秀的程序员,十分优秀!