我知道沒有線程可以訪問當前視圖,除非它是UI線程。我想知道爲什麼?爲什麼哪個線程正在改變視圖?這是安全原因嗎?這是圍繞我用的工作:爲什麼不能使用UI線程訪問視圖的線程?
public void doLayout()
{
Runnable run = new Runnable()
{
public void run()
{
ViewerActivity.setContentView(R.layout.main);
}
};
handler.post(run);
}
private Handler handler;'
這是一種痛苦要做到這一點,每次我想改變佈局。有沒有不同的工作?我知道異步任務,我從來沒有找到一個好的方法來使用它,比我在做什麼好?所有相關的答案都很有趣!
你應該閱讀更多關於Java中鎖定/同步(即當使用「同步」) - 一旦你明白,這將是顯而易見的,爲什麼你有爲了赴湯蹈火從單獨的線程與UI線程進行交互。 –
分離的原因是爲了避免死鎖。假設你可以自由修改任何線程的視圖。假設你正在進行數據庫調用。所以,你得到一個視圖組件的處理程序,然後查詢數據庫,但數據庫鎖定並隨後鎖定當前線程。現在UI線程也將被鎖定,因爲您正在修改視圖,並且必須等待它被釋放才能安全繼續。這會產生非常糟糕的程序,最終會導致比目前更多的鎖定。 – methodin
大多數用戶界面,無論平臺和語言如何,都只能訪問主用戶界面線程中的用戶界面,推理通常是,製作線程安全用戶界面非常困難,不值得花費精力,而且會導致非常嚴重的速度損失因爲圖形用戶界面環境需要快速響應。 – nos