Android 判斷當前執行緒是否是主執行緒的兩種方法

yangxi_001發表於2016-03-04

使用Looper判斷,方法為: Looper.myLooper() != Looper.getMainLooper()

使用執行緒控制程式碼判斷,將主執行緒的Thread.currentThread()獲取到主執行緒當前控制程式碼,儲存起來,在需要判斷的時候呼叫Thread.currentThread()來與之比較,即可判斷當前執行緒是否是主執行緒了。

Handler一定要在主執行緒例項化嗎?new Handler()和new Handler(Looper.getMainLooper())的區別
如果你不帶引數的例項化:Handler handler = new Handler();那麼這個會預設用當前執行緒的looper
一般而言,如果你的Handler是要來重新整理操作UI的,那麼就需要在主執行緒下跑。
情況:
1.要重新整理UI,handler要用到主執行緒的looper。那麼在主執行緒 Handler handler = new Handler();,如果在其他執行緒,也要滿足這個功能的話,要Handler handler = new Handler(Looper.getMainLooper());
2.不用重新整理ui,只是處理訊息。 當前執行緒如果是主執行緒的話,Handler handler = new Handler();不是主執行緒的話,Looper.prepare(); Handler handler = new Handler();Looper.loop();或者Handler handler = new Handler(Looper.getMainLooper());
若是例項化的時候用Looper.getMainLooper()就表示放到主UI執行緒去處理。
如果不是的話,因為只有UI執行緒預設Loop.prepare();Loop.loop();過,其他執行緒需要手動呼叫這兩個,否則會報錯。

相關文章