问题标签 [gcmtaskservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - GCMTaskService - 一次性任务 setPersisted、setRequiredNetwork(Task.NETWORK_STATE_CONNECTED) 和 setRequiresCharging Android
我想问几个与 Android 中的 GCM One off Task 相关的问题。阅读许多文档,但不确定以下内容:
- 一次性任务是否支持 setPersisted?如果是,默认值是多少。
- NETWORK STATE CONNECTED 的确切含义是什么?它是否只考虑手动切换移动数据或检测从有限连接到强连接的连接?
- 一次性任务的 setRequiresCharging 默认是什么?
请不要在回复时将一次性任务和定期任务混为一谈。
android - GCM 网络管理员失去工作
我正在尝试使用 GCM 网络管理器将日志发送到后端服务。我们大约每小时都会运行一个警报,它会创建一个 OneoffTask,在执行该任务时,它将使用日志消息调用后端服务。
这行得通,但是丢失了大量的任务(超过一半)。起初,我认为它与我们的后端或网络有关,但在添加了大量文件日志记录后,事实证明服务中的 onRunTask 从未为这些任务触发(但它们肯定会被安排。为什么这些丢失了吗?是我误解了 API,还是 OneoffTasks 根本不可靠?
这是 OneoffTask 的调度方式:
同样,这不起作用,而只是部分消息。对于随后丢失的消息,上面的代码 肯定会执行(我添加了文件日志来验证这一点),但从来没有为丢失的消息触发相应的 onRunTask。
我已经证实:
- 根据网络管理器实施指南 ( https://developers.google.com/cloud-messaging/network-manager )更新清单
- AvroLogService(我的服务)扩展了 GcmTaskService
- 它覆盖 onRunTask
- 该应用程序具有 RECEIVE_BOOT_COMPLETED 权限。
- AvroLogService 不会覆盖 onStartCommand。
我迷路了。有人可以分享对此的见解吗?
android - Android GCMNetworkManager - 每天在特定时间范围内运行作业
我希望能够在每天的某个时间范围内运行定期任务,例如,在上午 8 点到上午 11 点之间。我不确定如何使用 来执行此操作PeriodicTask
,因为您无法指定一天中的特定时间。
我偶然发现了这个例子,但它使用了 Evernote 的 Android-Job 库。有没有办法GCMNetworkManager
专门实现这一点?
android - 即使在退出应用程序后也让 GcmNetworkManager 定期任务工作?
我需要一个需要互联网连接并在重新启动后仍然存在的定期任务。我已经取得了很多成就,但问题是我希望应用程序在我退出后也能继续工作。
如,如果我存在应用程序并关闭 wifi 然后再次将其关闭(如果时间已到),则应触发任务并在后台工作。
这是 startPeriodicTask 方法
我只是在检查 playServices 后立即在 OnCreate 中调用此方法
我已将此添加到清单中,以便在重新启动后继续执行该作业
java - GcmTaskService:取消和调度当前正在处理的任务的标签
有了GcmNetworkManager
,我的理解是两个具有相同标签的任务永远不能同时运行。这是根据文档here
对于每个服务,具有相同标签的两个任务永远不会同时执行。如果在现有任务仍在运行时新计划的任务到达,则新任务将被丢弃。此外,不同的任务可以同时调度,如果它们的调度重叠,每个任务都在单独的线程中调用。在调度多个任务时确保线程安全由您决定。
我的问题是:
如果我们安排一个任务(a OneoffTask
):
然后在稍后的某个时候我们取消它,但让我们假设它当前正在运行(它GcmTaskService:onRunTask
仍在其线程上运行):
然后在稍后的另一个时间,我们重新安排相同的标签:
当GcmTaskService:onRunTask
重新安排的任务运行时,是否GcmNetworkManager
仍然知道有一个任务正在运行(GcmTaskService::onRunTask()
还没有返回?(注意此时它的标签被取消了)
或者它实际上是否因为它的标签被取消而开始一个新的GcmTaskService
调用?GcmTakService:onRunTask
这意味着实际上可能有两个GcmTaskService:onRunTask
相同的标签同时运行。
android - GCMTaskManager PeriodicTask... 重新启动计时器和/或查看还剩多少时间?
我正在尝试使用 GCMTaskManager 安排大约每 30 分钟运行一次的定期任务。当它运行时,它会对 APP 中的一些内部数据进行“更新”。
我已经初步运行了它,并且可以使用 中的LOG
命令看到OnRunTask
该任务根据需要触发。我让它运行(至少根据我在OnRunTask
触发时填充的日志。
我有两个问题我无法确定是否可以完成......
有没有办法查看在下一次火灾之前“还剩”多少时间
OnRunTask
......或者......大约接下来应该运行什么“时间”?例如,如果 PeriodTask... 有 30 分钟,而 18 分钟已经过去,我们能否以编程方式看到还剩 12 分钟?我有一个内部“按钮”来手动触发 APPS 更新。如果用户点击了这个,我想从那个点“重新启动”PeriodicTask 计时器。也就是说,如果
OnRunTask
假设 30 分钟在大约 12 分钟内触发,并且用户手动点击 UPDATE,我希望OnRunTask
现在从按下按钮后的 30 分钟重新启动。这可以做到吗?
谢谢
皮特
android - GSMTaskManager onRunTask 调用 MainActivity 方法?
我有一个应用程序,它MainActivity
有一个从按钮点击调用的方法(称为doUpdate()
)。这使用MainActivity
的公共变量来访问数据库,执行一些更新,并更新一些记录。这很好用。
我们现在还需要使用 a 来自动化它PeriodicTask
。
我创建了一个GCMTaskManager
服务如下:
在我的 MainActivity 中onCreate()
,我设置PeriodicTask
如下:
通过查看日志,我知道onRunTask()
火灾会如我所愿定期发生。
现在我需要调用我的MainActivity
方法doUpdate()
...... 因为这个方法是声明的PUBLIC
VOID
而不是声明STATIC
的,所以我不能从服务中调用它doRunTask()
。如果我尝试将其设为 a STATIC
PUBLIC
VOID
,则MainActivity
无法根据内部处理步骤的需要正确访问变量。
我该如何解决这个问题......有什么建议吗?
android - GcmNetworkManager OneoffTask 经常调用,在 Android N 上检测网络状态变化时出现问题
我需要应用程序在网络状态发生变化时唤醒,即使不在后台运行也是如此。
在 Android N 之前,我在 Manifest 中注册了一个网络状态更改
这在 Android N 上已被弃用。我知道它仍然可以不在 Manifest 中注册它,而是以编程方式注册它,但只要应用程序在后台运行,它就可以工作。-> 但我需要一个在应用程序完全关闭时也能工作的解决方案。
我现在尝试的是有一个服务扩展GcmTaskService
它看起来像这样:
基本思想是安排一个在网络变化时触发的任务,如果它确实在未来网络状态再次变化时重新安排该任务。
乍一看,这似乎有效,onRunTask(TaskParams taskParams)
每次在我调试时网络发生变化时都会调用它。但是当我把我的安卓手机锁在我的桌子上一小时(并且它连接到无线网络)并且没有移动或任何东西时,该任务在一小时内被调用了大约 40 次!
谁能向我解释为什么这个任务经常被调用?网络状态真的会在一小时内经常发生变化,还是我用OneoffTask
错了?
附加问题:我通常希望每次设备从未连接状态切换到已连接状态时执行一项任务,我没有被迫使用 GcmNetworkManager。有没有更好的方法在 android 上实现这一点(不使用推送或任何外部服务)?
android - 使用 onInitializeTask 函数跟踪 Android 应用升级是否安全?
根据文档,每当客户端应用程序/播放服务更新时,都会调用onInitializeTasks( https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmTaskService.html#onInitializeTasks() )。当我的应用被 Play 商店更新时,我可以安全地使用此回调来捕获事件吗?该行为是否有任何已知异常?