2012-05-19 114 views
0

本示例從Android上的書中複製而來。正如你可以從我的問題中看到的,我是Android新手,並試圖理解。 此應用程序應該會崩潰,但它不會(我正在從另一個線程更新UI,這是不允許的,它應該會導致崩潰,但不會,爲什麼?)。我的代碼是:瞭解簡單ProgressDialogue,另一個線程如何更新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(解除對話)從另一個線程?爲什麼這個應用程序不是導致分段錯誤?

謝謝。

回答

1

你不能dismiss()它的運行方法,因爲它是non UI thread。而如果要解僱然後用Handler。而且它能夠更好地使用AsyncTask

+0

我想你誤解了我的問題,或者我誤解了你的答案。即使我從其他線程更新UI,該應用程序也不會崩潰。我想知道它爲什麼不會崩潰。 – Anon

0

編碼是正確的只有man.You開始使用一個線程.start函數,之後運行函數調用,然後在7秒後對話框將被解除。對話.dismiss()用於解除對話。如果您不會調用dismiss(),則進度條永遠不會被解除。您可以通過註釋Thread.sleep(7000)來檢查。

+0

這是正確的,但我正在從另一個線程更新UI。這是不允許的。它會導致崩潰。它不是。爲什麼? – Anon