首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制GcmTaskService立即运行

强制GcmTaskService立即运行
EN

Stack Overflow用户
提问于 2015-06-30 14:31:52
回答 1查看 753关注 0票数 3

我试图在没有GcmTaskService的情况下启动一个等待30秒。如果任务没有成功,那么它应该遵循通常的GcmTask规则。

但是为了防止滥用,调度程序在未来只会设置至少30秒的警报。如果发生某种网络事件来唤醒调度程序,您的任务仍然可以比此更早地运行。

这不管用:

代码语言:javascript
复制
public static void start(Context context) {
    context.startService(new Intent(context, FileDownloadService.class).setAction(
            SERVICE_ACTION_EXECUTE_TASK));
}

我不希望有两个服务做同样的事情。

EN

回答 1

Stack Overflow用户

发布于 2015-07-01 01:42:55

您不能在Google服务启动任务的startService b/c上使用GcmTaskService。如果您绝对需要,可以重写onStartCommand() (确保在完成时调用super.onStartCommand,检查其意图是否符合您的预期)。如果你这样做了,它看起来就像

代码语言:javascript
复制
public int onStartCommand(...) {
    if ("my.app.TRIGGER_TASK".equals(intent.getAction())) {
        // run your task logic.
    }
    return super.onStartCommand(...);
}

也就是说,如果您在onStartCommand中运行您的任务,它将在应用程序的主线程上运行您的任务,因此您无法执行任何阻塞i/o操作。

此外,当GcmTaskService检测到以前执行的任务已经完成时,可能会遇到一些问题,在这些问题中,stopService()会自动调用它自己。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31141157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档