如何在不阻止UI线程的情况下从future.get()中获取返回值?

时间:2019-04-04 21:23:57

标签: android multithreading concurrency future

我有一种方法可以对Future进行一些后台工作。我需要知道如何在不阻塞UI线程的情况下获得结果。我必须在哪里进行future.get()通话?

我试图在while循环中使用方法future.isDone(),但是正如预期的那样,这也会阻塞UI线程。

这是我的代码:

Future<ArrayList<String>> future = DefaultExecutorSupplier.getInstance().forBackgroundTasks()
                .submit(new Callable<ArrayList<String>>() {
                    @Override
                    public ArrayList<String> call() {

                        //DO SOME LONG WORK

                        return results;
                    }
                });

        try {
            return future.get();
        } 
        catch (ExecutionException e) {
            e.printStackTrace();
        } 
        catch (InterruptedException e) {
            e.printStackTrace();
        }

此刻,UI仅在future.get()行中停止,等待其完成。

0 个答案:

没有答案