0

この例は、Android の本からコピーしたものです。私の質問からわかるように、私は Android が初めてで、理解しようとしています。このアプリケーションはクラッシュするはずですが、クラッシュしません(別のスレッドから UI を更新しています。これは許可されていません。クラッシュを引き起こすはずです。クラッシュしません。なぜですか?)。私のコードは次のとおりです。

final ProgressDialog dialogue = ProgressDialog.show(this, "title", "message");

       new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
                try {
                    Thread.sleep(7000);
                dialogue.dismiss();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }



        }
    }).start();

これはOnCreate関数で行われます。私はラインと混同しています -dialogue.dismiss();それは別のスレッドからの UI の更新 (ダイアログの非表示) ではありませんか? このアプリでセグメンテーション違反が発生しないのはなぜですか?

ありがとう。

4

2 に答える 2

1

.andを却下したい場合はHandlerdismiss()を使用するため、run メソッドでそれを行うことはできません。AsyncTask を使用することをお勧めしますnon UI thread

于 2012-05-19T09:56:10.837 に答える
0

コードは正しい人だけです。.start 関数を使用してスレッドを開始し、その後 run 関数が呼び出され、7 秒後にダイアログが閉じられます。dialog.dismiss() は、ダイアログを閉じるために使用されます。は、dismiss() を呼び出しません。プログレス バーは閉じられません。Thread.sleep(7000) の行にコメントを付けることで確認できます。

于 2012-05-19T10:52:30.687 に答える