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();過,
其他線程需要手動調用這兩個,否則會報錯。