1. 程式人生 > >(一百一十一)測試handler的歸屬權

(一百一十一)測試handler的歸屬權

1.問題

最近在想handler訊息處理是委託給looper所屬的執行緒,那麼handler自身建立的各類物件是歸屬誰的呢?

 

2.demo

demo:jiatai demo

package com.example.demo_111_handleiswhose;

import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;


public class MainActivity extends AppCompatActivity {
    private static final String TAG = "handlertest";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        HandlerThread handlerThread = new HandlerThread("jiataitest");
        handlerThread.start();
        Handler handler = new MyHandler(handlerThread.getLooper());
        handler.sendEmptyMessage(1);

    }

    private class MyHandler extends Handler{
        MyHandler(Looper looper){
            super(looper);
            Log.d(TAG, "MyHandler constructor");
            printThread();
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Log.d(TAG, "MyHandler handleMessage");
            printThread();
        }

        public void printThread(){
            Log.d(TAG, "the thread is " + Thread.currentThread().toString());
        }
    }
}

 

3.除錯結果及總結

12-08 11:20:37.410 3845-3845/? D/handlertest: MyHandler constructor
    the thread is Thread[main,5,main]
12-08 11:20:37.410 3845-3875/? D/handlertest: MyHandler handleMessage
    the thread is Thread[jiataitest,5,main]

建構函式裡跑的執行緒自然還是建立者,handleMessage跑的才是looper歸屬的執行緒。看起來是理所當然的,但是除錯一下更放心一些。