gpt4 book ai didi

android-annotations - 如何使用 AndroidAnnotations 取消 @Background 任务

转载 作者:行者123 更新时间:2023-12-05 01:09:47 26 4
gpt4 key购买 nike

我的用例是,每当用户键入 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 回答。

最佳答案

从 AA 3.0 开始就有可能。阅读本文 thread .

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

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

关于android-annotations - 如何使用 AndroidAnnotations 取消 @Background 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15382196/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com