0

私は Java と Android の初心者です。スレッドに関する質問があります。xml レイアウトの android:onClick からトリガーされる次のコードがあります。結果の動作は、UI が 5 秒間待機し、その 5 秒後にのみ ProgressDialog開始します。スレッドが独立して起動し、ダイアログがすぐに表示されるべきではありませんか? スレッドが手順の進行を止めているのはなぜですか? ありがとう!

// (Button)
public void buttonReadGps(View v){

    Thread readingGps = new Thread(){
        public void run() {
            // Read GPS code will go here
            try {
                sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    };
    readingGps.run();

    // Create a wait dialog
    prgDialg = new ProgressDialog(context);
    prgDialg.setTitle("Reading GPS...");
    prgDialg.setMessage("Please wait.");
    prgDialg.setCancelable(true);
    prgDialg.setIndeterminate(true);
    prgDialg.show();
}
4

1 に答える 1

4

交換

readingGps.run();

readingGps.start();

問題は、最初のバージョンがメソッドを同期的に実行し、メイン スレッドをブロックすることです。2 番目のバージョンは実際にスレッドを開始して続行するため、メソッドは新しいスレッドで非同期に実行されます。

これは Android で非常に一般的なパターンであり、 SDKが役立ついくつかのクラスを提供しています

于 2013-07-10T00:11:46.350 に答える