我希望它在我单击登录按钮后立即显示,但它仅在登录过程完成后显示
我做错了什么
runOnUiThread(new Runnable() {
public void run() {
mProgress.setVisibility(View.VISIBLE);
}
});
doLogin();
mProgress.setVisibility(View.INVISIBLE);
答案 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();