Der Zugriff auf die UI-Ansicht in einem anderen Thread * verursacht * keinen Absturz. Warum?

Alles:

Ich habe noch keine Grok-Handler. Ich dachte, dass der folgende Code - der so geändert wurde, dass anstelle eines Handlers direkt auf das UI-Widget (Fortschrittsbalken) zugegriffen wurde - eine Cross-Threading-Ausnahme auslösen würde. Aber das tut es nicht. Also, meine Frage ist, sollte dieser Code nicht abstürzen? Und wenn nicht, wann muss ich dann einen Handler verwenden?

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        progress = 0;
        progressBar = (ProgressBar) findViewById(R.id.progressbar);
        progressBar.setMax(200);

        //---do some work in background thread---
        new Thread(new Runnable()
        {
            public void run()
            {
                //ó-do some work hereó-
                while (progressStatus < 200)
                {
                    progressStatus = doSomeWork();
                    progressBar.setProgress(progressStatus); // not on UI thread
                    //ó-Update the progress baró-            // so shouldn't it crash?
//                    handler.post(new Runnable()
//                    {
//                        public void run() {
//                            progressBar.setProgress(progressStatus);
//                        }
//                    });
                }

                //---hides the progress bar---
                handler.post(new Runnable()
                {
                    public void run()
                    {
                        //---0 - VISIBLE; 4 - INVISIBLE; 8 - GONE---
                        progressBar.setVisibility(View.GONE);
                    }
                });
            }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage