0

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

我究竟做错了什么

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

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

2 回答 2

0

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

也许在 runonuithread 调用之后立即在当前线程中添加一个睡眠例程可能会安排可运行的,但你永远无法确定。

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

于 2012-08-25T14:28:02.133 回答
0

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

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

这是您应该如何做的:

//make sure mProgress is final
mProgress.setVisibility(View.VISIBLE);
new Thread(){
    public void run(){
         doLogin();
         mProgress.setVisibility(View.INVISIBLE);
    }
}.start();
于 2012-08-25T20:39:35.813 回答