java 如何在后台线程开始执行之前强制显示进度条?

cxfofazt  于 2023-02-11  发布在  Java
关注(0)|答案(1)|浏览(113)

我认为这对这个社区的许多人来说是一个非常简单的问题,然而,经过几次实验,我还是无法做到这一点;我会很感激任何帮助。
它是JAVA-安卓平台:当用户单击按钮时,代码需要执行以下步骤:
1.使按钮不可见(在主线程中运行)
1.使进度条可见(在主线程中运行)
1.从互联网下载文件(在后台线程中运行)
1.等待下载完成
1.使进度条不可见
1.使按钮再次可见
就是这样。看起来并不难,但是,它并不像我所需要的那样起作用。
这就是问题所在:第3步在第1步和第2步之前执行,......我已经尝试了几次实验,但没有成功。

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 ...
}

###########################################################

基于沙根·维尔马的反馈;这是对我的具体问题的修复。谢谢!

private void f3()
{
    ExecutorService executorService = Executors.newSingleThreadExecutor();
    executorService.execute(() ->
    {       
        f1();
        f2();
       // continues execution ...

    });
}
wqsoz72f

wqsoz72f1#

要实现这一点,您必须使用Java中的Executors。下面的代码将为您完成这项工作-

btnPausePlay.setOnClickListener(view -> {
    btnPausePlay.setVisibility(View.GONE);
    progressPausePlay.setVisibility(View.VISIBLE);
    ExecutorService executorService =  Executors.newSingleThreadExecutor();
        executorService.execute(() -> {
            // Implement your file download code here i.e.
            // httpRequest_noBackgroundThread( urlStr, urlParams, fileStr, itf );
        handler.post(() -> {
            btnPausePlay.setVisibility(View.VISIBLE);
            progressPausePlay.setVisibility(View.GONE);
        });
    });
});

当您按下btnPausePlay按钮时,它将变为不可见,而进度条变为可见。之后,一旦下载完成,则会发生相反的情况。

相关问题