2012-05-21 28 views
4

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

謝謝。

+0

可能解僱只會泄漏對話。 – Blackbelt

回答

7

dismiss()方法可以安全地在任何線程上運行,如Android文檔中所述。

公共無效解僱()

自:API等級1關閉此對話框,從屏幕中移除。 此方法可以從任何線程安全地調用。請注意, 不應重寫此方法,以便在對話框 被解除時進行清理,而是在onStop()中實現該方法。

+6

+1 - 尼斯抓到:) –

相關問題