0

ログインボタンをクリックするとすぐに表示されるようにしたいのですが、ログインプロセスが終了した後にのみ表示されます

私は何を間違っていますか

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

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

2 に答える 2

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 に答える
0

可視性を表示するために別のスレッドを使用しているため、ランナブルは将来いつでもスケジュールされる可能性があります。表示が遅いのはそのためです。

runonuithread 呼び出しの直後に現在のスレッドにスリープ ルーチンを追加すると、ランナブルがスケジュールされる可能性がありますが、確実なことはありません。

編集:または、進行状況バーを表示するハンドラーを作成し、それが表示されるのを待ってから続行することもできます

于 2012-08-25T14:28:02.133 に答える