Indeterminate Progress Bar仅在操作结束时非常简短地显示

时间:2012-08-25 14:22:03

标签: android progress-bar

我希望它在我单击登录按钮后立即显示,但它仅在登录过程完成后显示

我做错了什么

runOnUiThread(new Runnable() {
            public void run() {
                mProgress.setVisibility(View.VISIBLE);
            }
        });

        doLogin();          
        mProgress.setVisibility(View.INVISIBLE);

2 个答案:

答案 0 :(得分:0)

由于您正在使用另一个线程来显示可见性,因此可以在将来的任何时间安排runnable。这就是它迟到的原因。

也许在runonuithread调用之后立即在当前线程中添加一个睡眠例程可能会调度runnable,但是你永远不能确定。

编辑:或者您可以创建一个显示进度条的处理程序并等待它显示然后继续

答案 1 :(得分:0)

您没有看到加载对话框的原因是您在GUI线程/ MAIN线程中调用了阻塞函数。当您将对话框设置为可见时,您应该让GUI线程继续运行以便它可以绘制对话框在屏幕上。在5秒后,GUI线程被阻止,将向用户显示FORCE CLOSE / Wait弹出窗口。

执行gui线程的长操作是一个不好的做法,你必须只能在其中执行非阻塞功能。

您应该如何做到这一点:

//make sure mProgress is final
mProgress.setVisibility(View.VISIBLE);
new Thread(){
    public void run(){
         doLogin();
         mProgress.setVisibility(View.INVISIBLE);
    }
}.start();