我的用例是,每当用户键入 EditText 时,输入数据都用于在后台执行操作。这些操作可能需要足够长的时间才能导致 ANR。如果操作完成得足够快,@TextChange 和 @Background 可以正常工作。但是操作是否需要足够长的时间,以便用户输入更多数据,我会遇到线程问题,因为会有多个后台任务将命令更新相同的 UI 组件。
我想我用 AsyncTask API 实现了想要的行为,但也想寻找基于 AndroidAnnotations 的解决方案,因为它大大简化了代码。顺便说一句,很棒的库。
下面是一些代码片段,希望能说明我的观点。感谢您至少阅读,感谢评论/答案:)
@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
}
更新:目前这是不可能的,请参阅下面的 DayS 的回答。