Runnable中的Android完成处理程序

时间:2019-05-20 13:47:35

标签: java android

我必须在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或其他任何操作。这是我的第一次,现在我知道是否可能有问题。

0 个答案:

没有答案