Android Java:如何让进度条在后台线程启动前显示?
Android UI更新与后台下载的执行顺序问题
需求是用户点击按钮时,代码需按以下步骤执行:
- 隐藏按钮(主线程执行)
- 显示进度条(主线程执行)
- 从互联网下载文件(后台线程执行)
- 等待下载完成
- 隐藏进度条
- 再次显示按钮
实际运行不符合预期,步骤3的下载操作会在步骤1、2的UI更新前执行,多次尝试均未解决。
原代码如下:
private void f1() { mDataBinding.btnPausePlay.setVisibility(btnVisibility); mDataBinding.progressPausePlay.setVisibility(progressVisibility); } private void f2() { Thread xThread = new Thread( new Runnable() { @Override public void run() // run in background thread { httpRequest_noBackgroundThread( urlStr, urlParams, fileStr, itf ); } }); try { xThread.start(); xThread.join(); // wait for the thread to finish } catch( Exception e ){ e.printStackTrace(); } } private void f3() { f1(); f2(); // continues execution ... }
修复方案
基于Shagun Verma的反馈,修改后的代码如下:
private void f3() { ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.execute(() -> { f1(); f2(); // continues execution ... }); }
内容的提问来源于stack exchange,提问作者Marco Jacobo
相关产品推荐
相关产品推荐

