首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android:执行服务:- ExecutorService不等待executorService完成

android:执行服务:- ExecutorService不等待executorService完成
EN

Stack Overflow用户
提问于 2016-11-02 14:13:02
回答 1查看 109关注 0票数 0

我有一个不等待executorService部件完成的executorService,它直接返回返回值,不需要等待下面是我的代码:请查看我是否正确地实现了executorService,如果需要,请帮助我更正它

代码语言:javascript
复制
 public boolean validateForm() {
        flag=true;
        executorService = Executors.newSingleThreadExecutor();
            Future f = executorService.submit(new Runnable() {
                public void run() {
                    Log.e("FLAGssssss", "" + flag);
                    checkSourceCode(new BooleanCallBack() {
                        @Override
                        public void onSuccess(boolean result) {
                            Log.e("RESULT  ISSSSS", "" + result);
                            validateCode = result;
                            Log.e("validateSourceCode  ISSSSS", "" + validateSourceCode(result));
                            if (validateSourceCode(result) == false) {
                                flag = false;
                            }
                            Log.e("FLAG ISSSSS", "" + flag);
                        }
                    });
                }
            });
            try {
                if (f.get() != null) {
                    flag = true;
                }
                Log.e("FUTURE IS", "" + f.get());

            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }
        if (!accept_checkbox.isChecked()) {
            Toast.makeText(getActivity().getBaseContext(), "Accept The Terms & Conditions To Proceed", Toast.LENGTH_LONG).show();
            //        accept_checkbox.requestFocus();
            flag = false;
        }
        if (!validateAddress()) {
            flag = false;
        }
        if (!validatelandmark()) {
            flag = false;
        }
        if (!validateDistrict()) {
            flag = false;
        }
        if (!validatePincode()) {
            flag = false;
        }
        if (!validateFullfillment()) {
            flag = false;
        }
        if (flag) {
            saveData();
        }

        executorService.shutdown();
        return flag; //flag is returned even before the executorService above is executed first
    }
EN

回答 1

Stack Overflow用户

发布于 2016-11-02 14:38:45

看起来在构造的回调和执行的回调之间存在一些混淆。

下面的代码创建并提交了一个新的Runnable任务,但Runnable只是打印一条消息,然后构造一个BooleanCallBack。我不确定BooleanCallBack到底做了什么,但假设它真的是一个回调,回调中的代码不会立即执行。

为了简单起见,让我们这样考虑Runnable

代码语言:javascript
复制
Future future = executorService.submit(new Runnable() {
    public void run() {
        sysou("runnable is running");
        checkSourceCode(new BooleanCallBack() {
            @Override
            public void onSuccess(boolean result) {
                sysou("callback from the runnable is running");
            }
        });
    }
});

当您调用future.get()时,它会等待run()方法完成执行,这涉及到构造BooleanCallBack,而不是实际运行它。类似于构造一个新的Runnable对象并不意味着执行run()方法中的代码。

因此,如果你的代码调用了future.get(),你唯一能确定的就是run()方法已经完成了(即你已经得到了"runnable is running“的消息)。不是说BooleanCallBack.onSuccess()已经执行了。

如果您实际上想要等待"callback from the runnable is running“位,那么您需要建立对BooleanCallBack的引用,以便可以检查其状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40373515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档