改造+ Android注释取消/停止请求+停止线程

时间:2015-08-17 11:04:04

标签: android multithreading retrofit android-annotations

我在我的项目中使用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界面中的所有方法都是同步的,并且具有返回类型。

1 个答案:

答案 0 :(得分:0)

首先,您应该在注释中添加取消标识符。

@Background(id = "someId")
void bgMethod1(){
  //call rest endpoint get response
  uiThread1(response)
}

如果要中断已经运行的请求,可以执行以下操作:

BackgroundExecutor.cancelAll("someId", true)

但是,这可能会导致对您的服务器的过时请求......