我试图在没有GcmTaskService的情况下启动一个等待30秒。如果任务没有成功,那么它应该遵循通常的GcmTask规则。
但是为了防止滥用,调度程序在未来只会设置至少30秒的警报。如果发生某种网络事件来唤醒调度程序,您的任务仍然可以比此更早地运行。
这不管用:
public static void start(Context context) {
context.startService(new Intent(context, FileDownloadService.class).setAction(
SERVICE_ACTION_EXECUTE_TASK));
}我不希望有两个服务做同样的事情。
发布于 2015-07-01 01:42:55
您不能在Google服务启动任务的startService b/c上使用GcmTaskService。如果您绝对需要,可以重写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,只要足够长的时间来启动您的任务。您可以安全地在绑定线程上执行onRunTask()逻辑。你必须处理你自己的同步。
https://stackoverflow.com/questions/31141157
复制相似问题