1

Task callInBackground 执行完成后,是否可以在 UI 线程上显示消息或进行更改?

如下所示:

Task.callInBackground(new Callable<String>() {
            @Override
            public String call() {


                for(int i=0; i<3; i++){
                    Log.i("I=", String.valueOf(i));

                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }

                String obj = "";
                return null;
            }
        }).onSuccess(new Continuation<String, Object>() {
            @Override
            public Object then(Task<String> task) throws Exception {
                Log.i("I=", "Counter complete");

                Toast.makeText(MainLoanMemberActivity.this, "Finished", Toast.LENGTH_SHORT).show();
                btnAgriLoan.setText("LOL");
                return null;
            }
        });

目前没有显示 Toast 消息,也没有崩溃。

在 Bolts 框架中寻找 AsyncTask 的 onPostExecute 的等效项,可以在其中添加对 UI 的更改。

4

1 回答 1

0

没有意识到每个帮助函数都可以提到 EXECUTOR 的类型,如下所示:(Task.UI_THREAD_EXECUTOR)

Task.callInBackground(new Callable<String>() {
            @Override
            public String call() {
                for(int i=0; i<3; i++){
                    Log.i("I=", String.valueOf(i));
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                String obj = "";
                return null;
            }
        }).onSuccess(new Continuation<String, Void>() {
            public Void then(Task<String> object) throws Exception {
                Toast.makeText(MainLoanMemberActivity.this, "Finished", Toast.LENGTH_SHORT).show();
                btnAgriLoan.setText("LOL");
                return null;
            }
        }, Task.UI_THREAD_EXECUTOR);

文档有帮助!

于 2019-04-12T09:25:33.840 回答