我试图在没有waiting the 30 seconds的情况下启动GcmTaskService。如果任务不成功,则应遵循通常的GcmTasks规则。
但是为了防止滥用,调度程序只会设置一个最低限度的警报
未来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()逻辑。你必须处理你自己的同步。

10-05 21:50