问题标签 [android-jobscheduler]
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 - SyncAdapter 与 JobScheduler
JobScheduler
排除仅支持 API > 21的事实-JobSchedulers
旨在完全替代SyncAdapters
?还是SyncAdapter
包含任何缺少的功能JobScheduler
?
我的用例是每隔几个小时同步一个 RSS 提要。这可以通过 JobScheduler 实现 - 对吧?
android - 出现 Wi-Fi 网络时,Android JobScheduler 不启动作业
我正在尝试设置JobScheduler
以通过 wi-fi 将一些图像上传到服务器。这是我设置的:
如果 wi-fi 网络可用,它可以很好地上传我的内容。但是如果我关闭它,强制安排服务,然后打开 wi-fi,它不会开始上传。
难道我做错了什么 ?或者JobScheduler
不是为了这个目的,我应该使用广播接收器来保证网络可用性?谢谢。
android - GCM 网络管理器 - 定期任务未触发
我正在尝试使用 GcmNetworkManager 在我的应用程序中安排重复任务,该任务运行到 API 级别 17。我已经按照 GCM 网络管理器页面(https://developers.google.com/云消息/网络管理器):
在我的 AndroidManifest.xml 中,我有:
在我的应用程序中,我有:
我有 MyService,它看起来像:
当我启动应用程序时,我按预期记录了onStartCommand,但永远不会调用onRunTask。我错过了什么吗?我期待,一旦启动(如启动命令触发所证明),它应该每 15-30 秒运行一次 - 这是一个正确的假设吗?为什么根本不发火?
谢谢!
android - 关于 GcmTaskService 的一些问题
背景
我想使用 Lollipop 上提供的新 JobScheduler API,但遗憾的是它没有用于 pre-Lollipop 的官方端口。
但是,有 GcmTaskService,它提供了非常相似的功能。
问题
这个 API 很新,所以很少有地方可以找到如何使用它的信息(例如这里和这里)。
问题
我对这个新 API 有几个问题:
似乎它需要使用 Google Play 服务(此处)(使用 Android 的 Lollipop 版本时除外,它将使用普通的 JobScheduler)。如果 Google Play 服务不可用,我该怎么办?
似乎即使我已将“setPersisted(true)”用于重复任务,但当我重新启动设备时,该任务将不会再次被调用。怎么会?编辑:那是因为我错过了 RECEIVE_BOOT_COMPLETED 的许可。
如果我不使用“setRequiredNetwork”,任务的默认行为是什么?是“NETWORK_STATE_ANY”吗?
文档说明了 onRunTask 返回的内容,我可以返回任何值“RESULT_FAILURE”、“RESULT_RESCHEDULE”、“RESULT_SUCCESS”(此处为信息)。似乎 FAILURE 和 SUCCESS 选项都会做同样的事情 - 从队列中删除任务。这是真的吗?如果是这样,它们之间究竟有什么区别?它们的功能不同吗?
“ TaskParams ”是否仅用于任务的标签?我可以使用 API 以某种方式将包传递给任务吗?否则,我需要设置一个数据库来存储应该传递给任务的内容,对吧?
应用程序是否可以获取任务队列?我知道可以使用 adb,但是也可以使用 API 吗?
他们说(这里)每个任务都有长达 3 分钟的唤醒锁。如果任务需要更多,应该怎么做?它应该为自己获取另一个唤醒锁吗?API 会警告唤醒锁已释放吗?这是文档所说的:
调度器会为你的服务持有一个 PowerManager.WakeLock,但是在执行三分钟后,如果你的任务没有返回,它将被认为已经超时,并且唤醒锁将被释放。此时重新安排您的任务将无效。如果您怀疑您的任务运行时间比这更长,您应该明确启动自己的服务或使用其他机制;此 API 旨在用于相对快速的网络操作。
他们说(在这里)每次应用程序升级/替换时都会删除所有网络任务,并且在发生这种情况时会调用“onInitializeTasks”,并且您可以再次重新安排它们。如何重新安排任务?我不认为我什至可以得到任务列表...
是否可以告诉任务更喜欢一天中的特定时间?例如,在 14:00-15:00 之间?
我注意到,如果您安排任务,然后强制停止和/或清除应用程序的数据,该任务仍将运行。我怎样才能避免这种行为?
android - GCM 网络管理器能否在非 Play 设备上运行?
作为JobScheduler
5.0 之前的 Android 的替代品,Google 发布了GCM 网络管理器,它自动使用 Android 5.0 中的本机 JobScheduler 和一些用于旧版本的自定义代码。
但是,我不确定它是否适用于非 Play 设备(没有 Google Play 服务的设备),例如 Kindle 和 Blackberry 10 以及中国手机。从名字上看,它似乎与 GCM 有关,所以我怀疑它只适用于 Play 设备。
谁能证实这一点?
android - 在 Android 中安排后台同步作业 (API > 15)
我们需要为 Android 应用程序安排定期同步作业。没有硬性计划要求,但只要每 6-7 小时同步运行一次,就可以了(只要有网络连接)。我们使用 compileSdkVersion 作为 22 和 minSdkVersion 作为 15(ICS)。我可以找到几个解决方案:
- AlarmManager(不考虑网络可用性)
- SyncAdapter(需要同步帐户)
- 作业调度器
- Gcm网络管理器
以上哪个是最好的候选人,为什么?
android - Android - JobServiceCompat 应用程序无法处理 onStopJob
我使用这个库(JobSchedulerCompat)来安排一些工作,但我在随机场合遇到了同样的错误。Logcat 看起来像这样:
该服务在清单上注册,导出参数为 True。
OnStopJob 方法我只返回 false,没有别的。当我尝试通过执行以下操作从 Job Scheduler 取消所有作业时会发生这种情况:
编辑:对不起,但我不知道如何在 Stackoverflow 中格式化 Logcat,如果你知道,请编辑我的问题。.
android - JobScheduler 两次发布工作(非预期)
我正在写一篇关于 JobScheduler 的教程,但我发现了一个奇怪的行为。我要求在 1 秒内安排 3 个不同的作业(.setOverrideDeadline(1000)),但它们都被提交并运行了两次......所以这里的代码:
使用此代码,我希望我的作业运行一次,但如果我查看我获得的日志:
我在本教程中所做的是使用 HandlerThread 运行一个作业,另一个使用 ExecutorService 运行,最后一个使用 AsyncTask 来解释如何在后台线程中完成工作。我展示了这种不同的技术,因为在某些用例中,您可能希望将作业排入同一线程 (HandlerThread) 或管理线程池 (ExecutorService) 或仅使用非托管线程 (AsyncTask)。
我定义了这些作业并在 MyApplication:onCreate 方法中安排它们。为了更深入地了解代码,我把它放在 GitHub 上:https ://github.com/MathiasSeguy-Android2EE/JobSchedulerForGitHub
android - Android java.lang.IllegalArgumentException:没有这样的服务 ComponentInfo JobScheduler
我试图创建一个简单的JobScheduler
工作只是为了看看它是如何工作的。但我在运行时不断收到这个异常,我无法弄清楚,因为我一步一步地按照指南。
这是我的电话:
TestService
除了 extends 之外不做任何事情JobService
。
android - Android - 跟进 GcmTaskService 和 GcmNetworkManager - 强制停止后调度任务
首先,我知道 这个 stackoverflow 问题、官方文档和这个 github 示例项目中的所有问题和答案
不幸的是,从我的测试中,我无法验证我提供的链接中提到的整个“强制停止后任务继续运行”观察。也许现在已经解决了?
无论如何,我想要完成的是仅在用户在强制停止后第一次打开他们的应用程序后重新安排我的任务。
假设我有一个应该每月运行一次的任务。我想要做的是仅在应用程序第一次启动时安排一次(通过 Once 库https://github.com/jonfinerty/Once)。此任务将运行良好,直到用户强制停止应用程序。那时我显然不在乎任务没有运行,因为用户已强制停止它,但我确实希望在用户再次打开应用程序后立即重新安排工作。
似乎代码中没有明显的地方可以做到这一点。例如,如果我在应用程序类中这样做,任务将被重新安排,但每次应用程序启动时它也会重新安排,这不是我想要的。例如,如果我在应用程序启动时每月安排一次任务,那么这个任务实际上将永远不会运行,因为它将在未来一个月的每一天(当用户打开应用程序时)安排一次,一次又一次。
关于如何执行此操作的任何想法?这应该是一个非常常见的场景,除非我缺少一些东西。
干杯