当前位置: 首页 > 知识库问答 >
问题:

Android Studio中的Progressbar在延迟时未显示

戚星腾
2023-03-14

我有一个方法,我想延迟一秒钟,而延迟运行应该有一个加载动画(ProgressBar)。

当该方法现在运行时,加载动画不会出现。当我不调用超时时,它会出现,当我不使它不可见后,它会在超时后出现。

那么,在超时运行时,如何显示加载动画?线程也有同样的问题。睡眠(1000)

public void firstMethod(){
    ProgressBar pgLoading = (ProgressBar) findViewById(R.id.pgLoading);
    
    pgLoading.setVisibility(VISIBLE);
    
    try {
        TimeUnit.SECONDS.sleep(1);
    }catch(InterruptionException ex){
        ex.printStackTrace();
    }

    pgLoading.setVisibility(INVISIBLE);
}

共有3个答案

郜彬
2023-03-14

这是因为当前线程正在暂停。为了避免这种情况,请将延迟/长进程放在不同的线程中。例如:

public void firstMethod(){
            ProgressBar pgLoading = (ProgressBar) findViewById(R.id.pgLoading);

            pgLoading.setVisibility(View.VISIBLE);
new Thread(()->{
//    Do all your long process here
    try {
        TimeUnit.SECONDS.sleep(1);
    }catch( InterruptedException ex){
        ex.printStackTrace();
    }
    runOnUiThread(() -> pgLoading.setVisibility(View.INVISIBLE));

}).start();




    }
元俊雅
2023-03-14

无法阻止主线程。这将导致整个渲染停止。这就是为什么只有在超时后才能看到结果。

这些操作应该在其他线程中处理。如果使用Java可以使用Runnable,但应考虑使用静态编程语言来使用协程。

例如:

    pgLoading.setVisibility(VISIBLE);
    new Thread() {
        public void run() {
            Thread.sleep(1000);
            runOnUiThread(new Runnable() {
               @Override
               public void run() {
                  pgLoading.setVisibility(INVISIBLE);
               }
            });
           }
          }
        }.start();
王长卿
2023-03-14

通过调用Hibernate方法,您使UI线程Hibernate1秒钟,在此期间,UI线程上不会发生任何事情,因此您看不到ProgressBar。相反,您应该使用TimerWG等待这一秒,然后关闭ProgressBar。查看如何使用TimerWork的链接。

 类似资料:
  • 我有一个包含BottomNavigationView的活动,这个bottomnav帮助该活动显示三个片段。这些片段加载良好,我使用AsyncTask来完成每一个繁重的操作,而在UI线程中,我会显示一个ProgressBar,直到所有内容都加载<我的片段有一个奇怪的行为:第一次加载片段时,实际显示它需要一些时间,而不是用进度条立即显示<这件事只有第一次发生,而且只发生在这个片段中<片段代码仅包含以下

  • 问题内容: 我有一个进度div,其绝对位置位于网页顶部。 当我单击Ajax.ActionLink时,有时在请求/响应时间不多时,它会在顶部闪烁。 如何添加延迟,以便进度条在500ms内不显示? 谢谢 这是工作代码 AjaxOptions 问题答案: 您将需要自己处理。 您可以通过指定(show it)和(hide it)事件的函数来处理加载元素的显示/隐藏,而不是指定a 。 有关的更多详细信息,请

  • 我想隐藏的动作条,当一个activity启动,当用户触摸屏幕显示几秒钟,然后再次隐藏。 下面是我想要的,但我想知道是否有更好的方法(忽略一些样式问题:魔术数字、逻辑重复等)。 我用的是ActionBarSherlock。 谢谢

  • 问题内容: 我想知道一段时间后如何调用函数。我已经尝试过time.sleep(),但是这会暂停整个脚本。我希望脚本继续进行,但是??? secs之后调用一个函数并同时运行其他脚本 问题答案: 看一看。它在新线程中运行您的函数。

  • 本文向大家介绍8085中产生时间延迟,包括了8085中产生时间延迟的使用技巧和注意事项,需要的朋友参考一下 在本节中,我们将看到如何使用8085程序生成时间延迟。该延迟将在不同的地方使用,以模拟时钟,计数器或其他区域。 当执行延迟子例程时,微处理器不执行其他任务。对于延迟,我们使用指令执行时间。在循环中执行一些指令,会产生延迟。有一些产生延迟的方法。这些方法如下。 使用NOP指令 使用8位寄存器作