我试图在没有waiting the 30 seconds的情况下启动GcmTaskService
。如果任务不成功,则应遵循通常的GcmTask
s规则。
但是为了防止滥用,调度程序只会设置一个最低限度的警报
未来30秒。您的任务仍可以早于
如果发生某个网络事件来唤醒调度程序,则会出现此情况。
这不起作用:
public static void start(Context context) {
context.startService(new Intent(context, FileDownloadService.class).setAction(
SERVICE_ACTION_EXECUTE_TASK));
}
我宁愿没有两个服务做同样的事情。
最佳答案
您不能在gcmtaskservice b/c上启动服务,这就是google play services启动任务的方式。
如果确实需要,可以重写onstartcommand()(检查意图是否与预期相符时,请确保调用super.onstartcommand)。如果你这样做的话,看起来会像
public int onStartCommand(...) {
if ("my.app.TRIGGER_TASK".equals(intent.getAction())) {
// run your task logic.
}
return super.onStartCommand(...);
}
也就是说,如果你在onstartcommand中运行你的任务,它将在你的应用程序的主线程上运行你的任务,这样你就不能做任何阻塞I/O。
此外,当gcmtaskservice检测到先前执行的任务已完成时,它可能会遇到gcmtaskservice负责对自身调用stopservice()的问题。
或者(更安全)可以绑定到gcmtask服务,只要足够长的时间就可以启动任务。您可以在绑定线程上安全地执行onruntask()逻辑。你必须处理你自己的同步。