我使用的情况是,每当用户键入的东西一个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:这是不可能的那一刻,见下文天”的答案。
这是可能的,因为AA 3.0。阅读本thread。
@Override
protected void onStop() {
super.onStop();
boolean mayInterruptIfRunning = true;
BackgroundExecutor.cancelAll("longtask", mayInterruptIfRunning);
}
@Background(id="longtask")
public void doSomethingLong() {
// ...
}
目前已是this kind of request on Android Annotations但它被关闭,因为提出了无解。但是,如果你有任何想法,继续前进,重新打开这一问题;)