我目前正在使用Android的GAE。我有一个搜索操作,它执行可能是数据存储区上长时间运行的查询(从AsyncTask调用)。在此过程仍在运行时,用户可以选择从应用程序注销。如果没有取消此请求的选项,实际注销必须等到进程完成并且控制权返回给客户端(正如我所说,可能需要几秒钟)。
有没有办法在服务器运行时取消对GAE端点的调用并将控制权返回给客户端?感谢。
P.S。
显然,仅取消AsyncTask是不够的。
答案 0 :(得分:0)
就个人而言,我将服务器comm放在一个服务中,这样无论用户做什么,请求都可以(通常)完成。在您的情况下,您可以让用户注销,还可以让请求完成吗?
否则,我不知道如何干净地中断端点请求。不幸的是,实际的阻止操作隐藏在端点(Google API客户端库)代码中,并且没有我所知道的取消操作。
当您编写取消任务时 - AsyncTask.cancel(boolean mayInterruptIfRunning) - 是不够的,是因为您已经尝试过它并且它不会中断被阻止的操作。
答案 1 :(得分:0)
不,Google端点使用servlet和servlet没有(标准)方式告诉正在运行的请求取消它的工作。你需要建立专有的东西。
例如:在服务器上长时间运行的进程中,您在主循环中检查用户是否仍然登录(通过数据存储区或内存缓存中的标志)。如果此标志告诉您用户已注销,则取消处理并返回。登录/注销过程也必须适当地设置此标志。