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
2017-08-10
這是因為你雖然是在子線程中創建的Handler,但是當Handler被創建出來的時候,子線程并沒有創建出Looper,而Handler在創建的時候就會與Looper進行綁定(可以去查看源碼),所以當你創建出Handler,而子線程沒有Looper,所以Handler會與主線程的Looper進行綁定。(因為主線程的Looper在主線程創建出來的時候便也別創建出來)
2016-11-08
什么錯誤??
2016-10-16
改成這樣就沒問題,但是那樣為什么會出錯
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