(一百一十一)测试handler的归属权

版权声明:本文为博主原创文章,未经授权禁止转载,O(∩_∩)O谢谢 https://blog.csdn.net/sinat_20059415/article/details/84890856

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归属的线程。看起来是理所当然的,但是调试一下更放心一些。

猜你喜欢

转载自blog.csdn.net/sinat_20059415/article/details/84890856