如何取消与一个AndroidAnnotations任务@Background

问题描述 投票:3回答:2

我使用的情况是,每当用户键入的东西一个EditText,输入数据被用于在后台执行操作。这些操作可能需要足够长的时间,以引起ANR。 @TextChange连同如果操作完成quicly足够@Background工作正常。但是操作需要足够长的时间,让用户输入更多的数据,我会得到线程的问题一样会有,将指挥同一UI组件的更新多个后台任务。

我想我实现了与API的AsyncTask想要的行为,但想看看基于AndroidAnnotations解决方案为好,因为它简化了代码了很多。大LIB的方式。

下面是一些代码片段会希望阐述我的观点。感谢您至少阅读,评论/回答感谢:)

@TextChange
void onUserInput(...) {
  // This will start a new thread on each text change event
  // thus leading to a situation that the thread finishing
  // last will update the ui
  // the operation time is not fixed so the last event is
  // not necessary the last thread that finished
  doOperation()
}

@Background
void doOperation() {
  // Sleep to simulate long taking operation
  Thread.sleep( 6000 );
  updateUi()
}

@UiThread
void updateUi() {
  // Update text field etc content based on operations
}

UPDATE:这是不可能的那一刻,见下文天”的答案。

android-annotations
2个回答
4
投票

这是可能的,因为AA 3.0。阅读本thread

@Override
protected void onStop() {
    super.onStop();
    boolean mayInterruptIfRunning = true;
    BackgroundExecutor.cancelAll("longtask", mayInterruptIfRunning);
}

@Background(id="longtask")
public void doSomethingLong() {
    // ...
}

1
投票

目前已是this kind of request on Android Annotations但它被关闭,因为提出了无解。但是,如果你有任何想法,继续前进,重新打开这一问题;)

© www.soinside.com 2019 - 2024. All rights reserved.