如果視圖的可見性爲GONE,將會崩潰一個應用程序,該應用程序會更改文本,背景資源並在後臺線程中擴充其中的一些視圖?我用兩個按鈕做了一些測試,一個可見,一個不見了,如果我在後臺線程中改變了可見的文本,崩潰了,當我用GONE可見性更改按鈕的文本時,它沒有崩潰。有人可以解釋這個嗎?android從後臺線程更改UI - 爲什麼它的工作?
回答
好的,我有一個給你的東西。
事件處理和線程
視圖的基本循環如下:
事件進來,被分派到相應的視圖。 視圖處理事件並通知任何偵聽器。
如果在處理事件的過程中,視圖的邊界可能需要更改 ,視圖將調用
requestLayout()
。同樣,如果在處理事件的過程中視圖的 外觀可能需要更改,視圖將會調用
invalidate()
。如果任
requestLayout()
或invalidate()
被稱爲,框架 將採取測量,佈局,並繪製樹 適當的照顧。
注:整個視圖樹是單線程。在任何視圖中調用任何方法時,您都必須在UI線程上。如果你正在其他線程上工作,並想從該線程更新視圖的狀態,則應使用Handler。
你可以在這裏找到更多http://developer.android.com/reference/android/view/View.html。
在你的情況你的視圖已經是GONE了,所以我認爲它沒有附加到視圖樹。
您必須創建一個處理程序!
在該處理程序中,將代碼更新爲UI,並在線程中調用Handler!
您不應該直接從線程中更新UI的語言!這是編程中的一個大錯誤!
例子創建你的處理程序:
static Handler updater1 = new Handler() {
@Override
public void handleMessage(Message msg) {
//your code to update the UI
}
};
實例從線程調用處理:
updater1.sendEmptyMessage(0);
有關的文字從一個線程改變的行爲可以在所有語言研究不同!但你永遠不應該這樣做,這是一個很大的錯誤!
也許當您嘗試更新可見性爲「GONE」的按鈕上的文本時,它不起作用!但你看不到它!
好的,但我需要知道爲什麼它的工作按鈕與GONE可見性? –
- 1. 爲什麼我的後臺工作線程阻塞UI線程?
- 2. 從後臺線程更新UI
- 3. 從多個後臺線程更新UI
- 4. 從後臺線程問題更新UI
- 5. 從後臺通知UI線程線程
- 6. 在android中,爲什麼UI不能從UI線程更新?
- 7. Android的後臺任務,UI線程和配置更改
- 8. 從後臺更新UI線程
- 9. 從後臺線程更新UI控件
- 10. 從後臺工作人員更新UI
- 11. C#:爲什麼我的後臺工作線程信號完成時,它不是?
- 12. 爲什麼從後臺線程更新時不刷新UI組件?
- 13. 爲什麼Tomcat的線程比後臺線程更昂貴?
- 14. 爲什麼只有Android的UI線程更新UI?
- 15. android UI從另一個線程更改
- 16. wpf後臺線程更新UI控制
- 17. C#WPF從工作線程更新UI
- 18. GDI +後臺線程有什麼作用?
- 19. 後臺工作線程
- 20. ASP.NET後臺工作線程
- 21. Qt:後臺線程刷新UI線程
- 22. 什麼是延遲後臺工作?它是如何工作的?
- 23. 從後臺線程訪問UI對象
- 24. 試圖在後臺工作線程中更改值單元格
- 25. 更改文本在後臺線程不工作
- 26. 更新片段後臺線程中的TextView(UI線程)
- 27. 從後臺線程
- 28. 從後臺任務中更新android UI
- 29. Android:正確的方式將消息從後臺線程傳遞到UI線程?
- 30. 在多個活動中更新UI的Android後臺線程
讓我知道如果你需要更多的信息或我錯過了什麼。 – user370305
這將解釋爲什麼用另一個線程的GONE可見性更改按鈕的文本不會崩潰......謝謝 –