亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Handler創建在Thread的成員變量中(沒有在run方法中),為什么2個輸出都是main線程

class MyThread extends Thread{
? ?public Handler handler2 =new Handler(){
? ? ? ?@Override
? ? ? ?public void handleMessage(Message msg) {
? ? ? ? ? ?Log.d("sss",Thread.currentThread()+"handler2");
? ? ? ?}
? ?};
? ?public void run() {
? ? ? ?Looper.prepare();
? ? ? ?Looper.loop();
? ?}

輸出

10-16 16:15:51.290 8057-8057/com.example.administrator.myapplication D/sss: Thread[main,5,main]handler2

10-16 16:15:51.290 8057-8057/com.example.administrator.myapplication D/sss: Thread[main,5,main]handler


正在回答

3 回答

這是因為你雖然是在子線程中創建的Handler,但是當Handler被創建出來的時候,子線程并沒有創建出Looper,而Handler在創建的時候就會與Looper進行綁定(可以去查看源碼),所以當你創建出Handler,而子線程沒有Looper,所以Handler會與主線程的Looper進行綁定。(因為主線程的Looper在主線程創建出來的時候便也別創建出來)

0 回復 有任何疑惑可以回復我~

什么錯誤??

0 回復 有任何疑惑可以回復我~

改成這樣就沒問題,但是那樣為什么會出錯

class MyThread extends Thread{
? ?public Handler handler2;
? ?public void run() {
? ? ? ?Looper.prepare();
? ? ? ?handler2=new Handler(){
? ? ? ? ? ?@Override
? ? ? ? ? ?public void handleMessage(Message msg) {
? ? ? ? ? ? ? ?Log.d("sss",Thread.currentThread()+"handler2");
? ? ? ? ? ?}
? ? ? ?};
? ? ? ?Looper.loop();
? ?}
}


10-16 16:20:25.372 15508-15611/com.example.administrator.myapplication D/sss: Thread[Thread-10025,5,main]handler2

10-16 16:20:25.392 15508-15508/com.example.administrator.myapplication D/sss: Thread[main,5,main]handler


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Android面試??虷andler詳解
  • 參與學習       54869    人
  • 解答問題       192    個

學Android開發,必學Handler,也是Android面試???/p> 進入課程

Handler創建在Thread的成員變量中(沒有在run方法中),為什么2個輸出都是main線程

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號