版权声明:本文为博主原创文章,未经授权禁止转载,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归属的线程。看起来是理所当然的,但是调试一下更放心一些。