强制GcmTaskService立即运行

时间:2015-06-30 14:31:52

标签: android google-cloud-messaging scheduled-tasks

我试图在没有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));
}

我宁愿没有2个服务做同样的事情。

1 个答案:

答案 0 :(得分:2)

您无法在GcmTaskService b / c上启动服务,这是Google Play服务启动任务的方式。 如果您绝对需要,可以覆盖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在检测到先前正在执行的任务完成时自行调用stopService()的问题。

或者(更安全),您可以将GcmTaskService绑定到足以启动任务的时间。您可以安全地在binder线程上执行onRunTask()逻辑。你必须处理自己的同步。