我在我的项目中使用Android Annotations。
我在后台线程中执行一组任务。每个后台线程都包含对REST端点的调用(使用Retrofit)。此时所有呼叫都是同步的。如果我离开应用程序(在片段的onDestroy中),我试图取消所有线程。
我的代码结构类似
@Background
void bgMethod1(){
//call rest endpoint get response
uiThread1(response)
}
@UiThread
void uiThread1(){
some UI related changes = show toasts etc
bgMethod2();
}
@Background
void bgMethod2()
//call next rest endpoint get response
uiThread2(response)
}
@UiThread
void uiThread2(){
some UI related changes = show toasts etc
bgMethod3();
}
依此类推......在这些线程运行的任何时候,如果我退出应用程序(按后退按钮),我想阻止所有这些线程运行(也停止当前的REST调用)作为所有未来的电话)
我目前正在引用Android注释的这个github页面
https://github.com/excilys/androidannotations/wiki/WorkingWithThreads
我曾尝试使用BackgroundExecutor.cancelAll inonDestroy片段无济于事。所有方法都执行(所有REST调用都是按顺序执行的)。
如何阻止所有线程执行/取消以及停止Retrofit在这些线程中进行的持续和未来请求。
我的Retrofit REST界面中的所有方法都是同步的,并且具有返回类型。
答案 0 :(得分:0)
首先,您应该在注释中添加取消标识符。
@Background(id = "someId")
void bgMethod1(){
//call rest endpoint get response
uiThread1(response)
}
如果要中断已经运行的请求,可以执行以下操作:
BackgroundExecutor.cancelAll("someId", true)
但是,这可能会导致对您的服务器的过时请求......