4

この例は、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

1 に答える 1

7

Android のドキュメントで説明されているように、dismiss()メソッドは任意のスレッドで安全に実行できます。

public void 却下 ()

導入されたバージョン: API レベル 1 このダイアログを閉じて、画面から削除します。このメソッドは、どのスレッドからでも安全に呼び出すことができます。ダイアログが閉じられたときにクリーンアップを行うためにこのメソッドをオーバーライドしないでください。代わりに onStop() で実装してください。

于 2012-05-21T08:28:51.320 に答える