我必须在x
毫秒的android系统中执行一项任务,其中x
可以从2变为2000(或多或少)。在线有很多好的答案,我将使用AsyncTask。在this问题中,我看到以下内容:
默认情况下,应用会将其创建的所有AsyncTask对象推送到 一个线程。因此,它们以串行方式执行,并且- 与主线程—一个特别长的工作包可能会阻塞 队列。由于这个原因,请使用AsyncTask处理较短的工作项 持续时间 5ms 。
大胆的文字使我想到了另一种方法。在成千上万的答案中,我还不清楚我要展示的内容是否有问题还是很好。
我有很长的一段课要完成:
public class Newton extends RootFindingAlgorithm {
@Override
public void solve(CompletedAction action) {
new Thread(() -> {
List<Double> guesses = new List<>();
//long task
action(guesses);
});
}
}
这是我创建的功能接口:
@FunctionalInterface
public interface CompletedAction {
void OnCompleted(List<Double> guessesList);
}
之所以有效,是因为我有一个“事件处理程序”(OnCompleted
),并且在线程完成其工作时执行。这是我调用代码的方式:
//Inside a fragment...
List<Double> guesses = new List<>();
(new Newton(...)).solve(guesses);
这种方法好吗?我是否应该喜欢一个扩展AsyncTask的静态内部类(通常方式)?
我之所以要这样做,是因为我在线程“直接”内执行完成处理程序,没有任何Handler
或其他任何操作。这是我的第一次,现在我知道是否可能有问题。