问题标签 [firebase-job-dispatcher]

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 回答
634 浏览

android - 使用主线程触发 Firebase JobDispatcher 进入 BG 线程

我目前正在使用 Firebase JobDispatcher 使用服务意图(在启动、安装和更新时注册)在后台运行定期检查。这工作正常,它产生了与主线程分开的自己的线程,所以我不锁定 UI,它会正确地终止线程,因此垃圾收集不会成为问题。

我还想从应用内的主线程触发同样的工作。问题是运行 jobdispatcher onCreate 会触发作业在主 UI 线程中运行,而不是在后台线程中运行。我的一个函数可以生成很多对象,所以即使它正常运行,它也会破坏应用程序的可用性,因为 GC 永远无法摆脱所有垃圾。

如何从主线程按需运行现有的 JobDispatcher 作业,但仍在单独的线程中?

非常感谢你的帮助。

为澄清此特定用法而进行的编辑

我的特殊情况涉及第一次运行,其中 UpdateNetworkerJob.class 可能需要几分钟才能运行。phoneHistoryCheck.GetLastCallChecked() 函数有一个循环,可以多次调用 Firebase,检索和放置信息。

9/12 更新

后续运行非常快,AsyncTask 可以工作。但是我发现我需要一个更强大的解决方案,目前正在研究ThreadPoolExecutor。GetLastCallChecked() 函数可能会向 Firebase 引擎抛出过多的内容,并导致主线程对 Firebase 的调用在它赶上时会在噪音中下降。我正在整理这部分。

主线程中的代码开始工作:

UpdateNetworkerJob.class

0 投票
1 回答
420 浏览

android - FirebaseJobDispatcher 不安排作业并给出错误,即为此包安排的任务太多

当我尝试使用 FirebaseJobDispatcher 安排作业时,它会给出错误,即为此包安排的任务太多。我安排了 5 个工作。

我得到的确切错误如下 -

NetworkScheduler:为此包计划的任务太多。未安排:[package.name/com.firebase.jobdispatcher.GooglePlayReceiver:UpdateCheckinFailed,u0]

我应该如何解决这个问题,我不能减少作业的数量,因为所有这些作业都是独立工作的,以便从本地设备同步到服务器,并且在同步完成后我会正确关闭它们。

谢谢

0 投票
1 回答
1012 浏览

android - Firebase Jobdispatcher:由于错误而无休止运行的作业永远不会再次安排

由于崩溃或 Android 进程清理而未完成的重复作业会发生什么情况?在我看来,不可能重新安排它。它永远不会再被执行。

例子

正如您在代码中看到的,作业永远不会因崩溃而终止。之后不会重新安排。

如果你想用 重新安排它FirebaseJobDispatcher.mustSchedule(),它会出现在 logcat 中:

E/FJD。ExternalReceiver:收到已运行作业的执行请求

W/FJD。JobService: 标签 = ... 的作业已经在运行

即使你FirebaseJobDispatcher.cancel()之前跑过。

有什么建议么?

0 投票
2 回答
57 浏览

android - 替换我的(资源密集型)服务

我有一个应用程序可以在通知中显示新数据。该数据由网络设备提供。我可以查询此设备并将其与我的服务中的缓存数据进行比较,以确定是否需要更新通知。我的应用程序有一个服务,它具有缓存数据的局部变量。如果设备有更新的数据,我会在通知中显示给用户。现在我开始收到 IllegalStateException ,因为 Android O 不允许在应用程序处于后台模式时调用 startService() 。我知道我可以在前台模式下启动服务,但由于 Android 提供的资源密集型方式较少,我想尝试一些新的东西。除了缓存在本地变量中的数据之外,它还存储在 Firebase 数据库中。

我的要求:

  1. 如果有新数据,每 10 秒检查一次(如果屏幕打开)
  2. 开机时检查是否有新数据
  3. 如果有新数据,更新通知
  4. 需要长时间运行并能够将新数据与旧数据(缓存或来自 Firebase)进行比较。
  5. 当应用程序处于后台模式时可以运行

我的想法:我看过 Firebase 作业调度程序(https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-)。也许我可以将它配置为每次打开屏幕时运行,每 10 秒运行一次,以从网络设备检索新数据并将其与 Firebase 数据库中的数据匹配。但是,经常查询数据库可能会花费很多性能。

0 投票
1 回答
898 浏览

android - Firebase Job Dispatcher 未在指定时间触发,日期为每天/每周等

我正在尝试使用firebase jobdispatcher来支持我的日历应用程序的旧设备和新设备,我指的是这个链接在我的应用程序中设置firebase代码是否需要在每周等特定时间安排工作或其他任何事情替代方案?在触发窗口设置方面需要帮助以递归地在特定时间和日期安排事件。例如,为期 1 周的每日下午 4 点活动

0 投票
1 回答
834 浏览

android - 使用 Firebase 作业调度程序在后台发出 Http 请求:异步还是同步?

我正在使用 Firebase Job Dispatcher 并按照https://github.com/firebase/firebase-jobdispatcher-android/blob/master/README.md中的描述进行设置。

要调度的作业是一个 http 请求。http 请求可以在应用程序处于前台(用户正在查看)时运行,或者在应用程序处于后台/未启动时运行。

应该将 http 请求(使用okhttp 库)放在单独的线程/异步中,还是可以直接从 JobService 调用它?

0 投票
1 回答
1091 浏览

android - Firebase 作业调度程序

我正在创建一个需要向 API 发送请求的应用程序。该请求必须每 2 分钟发送一次。为此,我使用 Firebase Job Dispatcher

问题是第一个请求是按时发送的,但下一个请求的发送延迟更大:例如。

  • 第一个请求:2分钟后发送
  • 第二个请求:2.3 分钟后发送(而不是两个)
  • 第三个请求:3.5 分钟后发送(而不是两个)
  • 第四个请求:5 分钟后发送(而不是两个)

可以想象,一天之后,延迟会是30分钟甚至更多……

这是我用来创建作业的代码(在主要活动中 - onCreate)

这是 PingJob 类(为了确保问题不是我在 onStartJob 中所做的,我只放了一个日志):

我正在使用带有 Android 6.0.1 的 Android 机器(但我的应用程序也必须在 4.3 设备上运行,这就是我使用 firebase 而不是 JobScheduler 的原因)和 Google Play 服务 11.5.09 (434)。

你有什么想法为什么要这样做?如果有办法解决这个问题?如果没有,还有其他方法可以每 2 分钟完成一次工作吗?

0 投票
1 回答
962 浏览

android - 在连接 WiFi 的 Android 上触发

背景资料

所以我创建了一个主要由服务支持的通知控制的应用程序。当用户失去与特定 WiFi 网络的连接时,此通知会消失,并且必须在用户回到家并连接到 Wifi 网络时出现。在 Android OI 之前只是让服务在后台运行。该服务绑定到一个广播接收器,该接收器会在 WiFi 连接和断开连接时通知该服务。然后,该服务将对这些更改采取行动。

突破性的变化

现在我们有了具有背景限制的 Android Oreo。因此,为了节省一些电量,我更改了应用程序以在 WiFi 断开连接时停止服务,并启动 Firebase Jobdispatcher 作业。只要 Android 愿意,就会执行此作业。所以很可能是用户连接到 WiFi,15 分钟后作业被执行。

问题

我希望在手机连接到 WiFi 网络时立即执行这项工作,而无需运行服务。我知道这是可能的,因为我最近在 Google 翻译 Android 应用程序中看到了这种完全相同的行为。当您启用一种语言进行离线翻译时,只有在连接 WiFi 时才会下载它。即使我关闭了它的所有服务(在开发人员选项中),它也会在我连接到 WiFi 时立即做出反应。

有任何想法吗?

对于任何有兴趣的人,这是我的工作配置:

0 投票
0 回答
525 浏览

android - Firebase Job Dispatcher 在 OnePlus、小米、联想等自定义 ROM 上无法正常工作

我有一项需要互联网的任务要执行,并且必须每天无限期执行,下面是我编写的执行相同操作的代码

现在的问题是,它可以在 Moto、Samsung 等普通设备上正常运行,但在 OnePlus、小米等自定义 ROM 上,该作业仅在打开应用程序时触发。有没有人遇到过这个问题或知道如何让它在自定义 ROM 上正常工作?

0 投票
1 回答
601 浏览

firebase-job-dispatcher - 在 android 中使用 Firebase 作业调度程序的多个服务

对于一个 android 应用程序,我想在不同的日子使用 firebase 作业调度程序启动三个服务。我可以对所有三个作业使用相同的 FirebaseDispatcher 对象吗?同时,即使应用程序关闭,如何维护相同的 FirebaseDispatcher 对象?如果我使用静态对象,如果应用程序崩溃,它将被清除。那么如何维护我的 FirebaseDispatcher 对象以使用相同的调度程序对象调度多个服务呢?或者我可以为不同的服务创建不同的 FirebaseDispatcher 对象吗?这是好习惯吗?