问题标签 [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.

0 投票
2 回答
6186 浏览

android - 关于 GcmTaskService 的一些问题

背景

我想使用 Lollipop 上提供的新 JobScheduler API,但遗憾的是它没有用于 pre-Lollipop 的官方端口。

但是,有 GcmTaskService,它提供了非常相似的功能。

问题

这个 API 很新,所以很少有地方可以找到如何使用它的信息(例如这里这里)。

问题

我对这个新 API 有几个问题:

  1. 似乎它需要使用 Google Play 服务(此处)(使用 Android 的 Lollipop 版本时除外,它将使用普通的 JobScheduler)。如果 Google Play 服务不可用,我该怎么办?

  2. 似乎即使我已将“setPersisted(true)”用于重复任务,但当我重新启动设备时,该任务将不会再次被调用。怎么会?编辑:那是因为我错过了 RECEIVE_BOOT_COMPLETED 的许可。

  3. 如果我不使用“setRequiredNetwork”,任务的默认行为是什么?是“NETWORK_STATE_ANY”吗?

  4. 文档说明了 onRunTask 返回的内容,我可以返回任何值“RESULT_FAILURE”、“RESULT_RESCHEDULE”、“RESULT_SUCCESS”(此处信息)。似乎 FAILURE 和 SUCCESS 选项都会做同样的事情 - 从队列中删除任务。这是真的吗?如果是这样,它们之间究竟有什么区别?它们的功能不同吗?

  5. TaskParams ”是否仅用于任务的标签?我可以使用 API 以某种方式将包传递给任务吗?否则,我需要设置一个数据库来存储应该传递给任务的内容,对吧?

  6. 应用程序是否可以获取任务队列?我知道可以使用 adb,但是也可以使用 API 吗?

  7. 他们说(这里)每个任务都有长达 3 分钟的唤醒锁。如果任务需要更多,应该怎么做?它应该为自己获取另一个唤醒锁吗?API 会警告唤醒锁已释放吗?这是文档所说的:

调度器会为你的服务持有一个 PowerManager.WakeLock,但是在执行三分钟后,如果你的任务没有返回,它将被认为已经超时,并且唤醒锁将被释放。此时重新安排您的任务将无效。如果您怀疑您的任务运行时间比这更长,您应该明确启动自己的服务或使用其他机制;此 API 旨在用于相对快速的网络操作。

  1. 他们说(在这里)每次应用程序升级/替换时都会删除所有网络任务,并且在发生这种情况时会调用“onInitializeTasks”,并且您可以再次重新安排它们。如何重新安排任务?我不认为我什至可以得到任务列表...

  2. 是否可以告诉任务更喜欢一天中的特定时间?例如,在 14:00-15:00 之间?

  3. 我注意到,如果您安排任务,然后强制停止和/或清除应用程序的数据,该任务仍将运行。我怎样才能避免这种行为?

0 投票
1 回答
14845 浏览

android - Firebase JobDispatcher - 与以前的 API(JobScheduler 和 GcmTaskService)相比,它是如何工作的?

背景

Google 有多种作业/任务调度解决方案,例如JobSchedulerGcmTaskService. 每个都有自己的优点和缺点。

最近,谷歌推出了一个名为“Firebase JobDispatcher”的新库。

问题

遗憾的是,关于这个新 API 的内容很少。事实上,很难找到任何关于它的东西。

我唯一找到的是他们的公告视频一个样本。但即使是他们,也没有太多关于这个 API 的知识。

问题

查看我之前与其他 API 的问题、调查和比较(例如,此处),我想问一下新 API 的工作原理以及使用它时要考虑的事项:

  1. 作业是否可以有参数保留,甚至可以在需要时进行修改?他们在示例中说“用户提供的附加功能的可选捆绑包。默认为空捆绑包。 ”是这样吗?它可以在执行时被作业修改吗?

  2. 可以轻松地重新安排工作吗?据说“一个布尔值,指示作业是否应该重复”。如何选择何时重新安排?我已经尝试了该示例,并选择了“重复”,但它似乎没有再次运行,只有一次。

  3. 与图书馆的工作相比,它可以受到保护吗(因为唯一的 ID)?

  4. 更新应用程序时是否需要格外小心(就像以前的 API 一样)?应用程序更新后仍可以安排工作吗?对样本进行测试,似乎在更新应用程序后工作完全消失了。可以避免吗?

  5. RECEIVE_BOOT_COMPLETED如果我希望即使在设备重新启动时仍能安排作业,是否需要它?样品似乎有它。

  6. 是否可以获得所有计划作业及其信息(包括参数)的列表,并能够取消特定/全部甚至修改它们?

  7. 应用清数据操作后作业会被删除吗?

  8. 是否可以告诉作业最好在某个时间范围内运行(例如:早上 7:00 到 8:00 之间)?提到了“ ExecutionWindowTrigger-它指定了应执行Job的时间窗口”。是这样吗?当它错过这个窗口时会发生什么?

  9. onStartJob类中的方法JobService返回一个布尔值,它的描述是“是否还有更多的工作剩余”。这是什么意思?needsReschedule方法的参数是什么jobFinished意思?它们相互关联吗?

  10. 有什么我应该知道的限制吗?例如每个函数的最小值和最大值?

0 投票
0 回答
149 浏览

android - GcmNetworkManager 最大计划任务数

我正在使用 GcmNetworkManager 以每 30 秒一个的速率安排 OneOff 任务。所有这些任务都将在失败时重试。我想知道如果用户将手机长时间置于飞行模式并且这些任务排队会发生什么。有些任务最终会被扔掉吗?

0 投票
0 回答
152 浏览

android - 来自其他包的 GcmTaskService

我可以从另一个包中为 GcmTaskService 安排任务吗?我仍然可以从其他包作为包装器启动普通服务。但也许有办法摆脱

例外。

0 投票
2 回答
1008 浏览

android - 如何安排 GcmTaskService 每天在特定时间运行

基本上它是一个周期性的 GcmNetworkManager 任务,应该在每天的特定时间运行,它是持久的,所以它在重新启动后仍然存在,它的周期是 86400000L(24 小时),但我需要它在特定时间第一次运行。

我已经创建了 TaskService 类,将其添加到清单并创建了任务,有没有办法做到这一点?

这是我的 TaskService 类:

这就是我创建任务的方式:

0 投票
0 回答
24 浏览

android - GcmTaskService 用于批量事件跟踪

我以这种方式命名我的问题,因为许多人可能正在使用 GcmTaskService 来执行不需要立即发生的事件跟踪等任务。跟踪是一个很好的示例,可以将任务推迟到设备充电时,或者无线电由于其他原因而唤醒时。

但是,当最终发送请求时,我有相当多的跟踪数据要发送到服务器,并且它不适合 OneoffTask 额外内容(10240 字节)。有没有更好的方法来传达请求的参数?我正确使用 GcmNetworkManager 吗?

首先十分感谢!

0 投票
2 回答
2853 浏览

android - android推送通知中的按钮

我正在 android 设备中推送通知消息,并遵循 GCM 文档供我参考,我有这样的场景,在通知本身中我必须显示按钮并且用户单击它将触发相应的操作。

从 GCM 文档中,我们可以在通知负载中添加 click_action 以在用户触摸通知时触发操作...

如何在通知消息中显示按钮(如接受/拒绝)?

0 投票
2 回答
1929 浏览

android - 在后台服务中使用 GoogleAPIClient

我的场景是我想让服务定期获取一些信息(例如用户的位置),将其报告给我的服务器并在该位置与某个 X 位置匹配时接收推送通知。

无论应用程序是否正在运行,我都会就什么是定期检索位置信息的最佳机制获得一些建议。以下是我考虑过的选项以及每个选项的一些背景信息。

创建标准 Android 服务

我的第一个想法是创建一个 STICKY 服务,该服务初始化一个 GoogleAPIClient,它将获取位置更新,一旦收到位置,它就会将其发送到服务器。这种方法的问题是我必须定期获取位置信息。因此,即使它没有运行位置扫描,该服务也会持续运行。另外,在服务中每隔一段时间轮询位置的最佳方式是什么?

使用 IntentService 创建警报

我想到的第二个选项是让警报管理器唤醒并启动一个启动位置更新的 IntentService(通过 GoogleAPIClient)。获得位置后,发送到服务器并关闭位置更新。这将解决定期启动/停止位置更新的问题。但是,在没有等待的情况下,我在 IntentService 中连接到 GoogleAPIClient 的运气并不好,我认为这不是最有效的做法。

创建 GcmTaskService

这具有 AlarmManager 的许多优点,并且在打盹模式方面似乎更有效,因为它只在手机处于维护模式时唤醒服务,所以它似乎是一个很好的解决方案。但是,我与连接到 GoogleAPIClient 以获取位置而无需等待的 IntentService 有相同的问题。

我可能在这个兔子洞里走得太远了,可能有一些明显的东西我遗漏了,所以任何建议都将不胜感激。

0 投票
2 回答
76 浏览

php - 如何解决这个问题我想发送通知

在这里,我想发送移动通知。我正在尝试这样我得到这样的错误。


{"multicast_id":9154934162102180737,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}


我不明白什么是API_ACCESS_KEY

0 投票
1 回答
96 浏览

google-cloud-messaging - 某些用户未触发 GcmTaskService

我们使用 GcmTaskService 将用户创建的实体异步上传到我们的服务器。

这适用于数千名用户,没有任何问题,但对于至少两个用户,任务被安排但永远不会运行

我们使用此代码来调度任务(scheduling是一个自定义对象,包含调度任务所需的一些参数):

我们正在使用com.google.android.gms:play-services-gcm:9.8.0. 谢谢!