uj5u.com熱心網友回復:
在安卓中子執行緒不能直接更新UI執行緒uj5u.com熱心網友回復:
在子執行緒中更新UI執行緒,這個在一年前我一個失誤操作。。突然發現 沒有崩潰 并且還正常運行了。。。我想應該是google對庫進行了修改 自動切執行緒了。
當然沒去探索原始碼。。。可以分享一下。。。
uj5u.com熱心網友回復:
按說是子執行緒崩潰,但是主執行緒正常跑,看上去沒事一樣,實際上子執行緒的代碼是不生效的。uj5u.com熱心網友回復:
跟在子執行緒toast一樣,雖然沒出現閃退但是土司也不會出現的uj5u.com熱心網友回復:
不了解kottlin(?名字存疑),沒報錯那就只有一個可能,你的改變UI的那個操作,確實在主執行緒執行的。比如
mTextView.postDelayed(new Runnable(){
public void run(){
mTextView.setText("111111111");
}
},2000);
這個為什么不崩潰?
uj5u.com熱心網友回復:
確實沒有崩潰,當xml內的textView的為寬高固定值時或者都為match_parent時,在子執行緒里就能更新,沒有崩潰。看了下應該是跟textview的更新機制有關uj5u.com熱心網友回復:
和TextView沒任何關系,子執行緒不能更新ui是Android的規定uj5u.com熱心網友回復:
我能不知道不能在子執行緒里更新嗎?不然我還問這段代碼為什么這么寫不崩潰干嘛
uj5u.com熱心網友回復:
你執行緒中設定文本的時候,多打幾個字,能換行那種,再試試。uj5u.com熱心網友回復:
之所以不崩潰,是因為沒有觸發 ViewRootImpl 的 requestLayout 方法。實際上子執行緒不能更新UI,其實就是因為 requestLayout 方法會首先呼叫 checkThread 方法來檢測執行緒。如果你的TextView高度寬度都設定成 wrap_content,那么基本上每次設定都會觸發這個方法的uj5u.com熱心網友回復:
老哥,穩~
只注意過更新UI有檢查執行緒的操作,沒仔細看過觸發條件
uj5u.com熱心網友回復:
可以看我的博客,剛寫了一篇子執行緒更新UI不崩潰的問題轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/108431.html
標籤:Android
