Android handler

普通的handler类是没有实现多线程的,在android中的handler要实现多线程,可以使用HandlerThread这个类,如下所示

package com.handlerThread;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;

public class handlerThread2 extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        System.out.println("activity线程ID:"+Thread.currentThread().getId());
        HandlerThread handlerThread = new HandlerThread("handlerThread");
        handlerThread.start();
        MyHandler handler = new MyHandler(handlerThread.getLooper());
        Message msg = handler.obtainMessage();
        msg.sendToTarget();
    }
    class MyHandler extends Handler {

        public MyHandler() {
            super();
            // TODO Auto-generated constructor stub
        }

        public MyHandler(Looper looper) {
            super(looper);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            System.out.println("handler线程ID:"+Thread.currentThread().getId());
        }
        
    }

}

运行结果:

由此才可以说handler实现了真正意义上的多线程。

在上面的程序中我们看到有个新知识looper,那么什么是looper呢,如下是官方的解释

大概的意思就是说,looper是用来循环获取消息的,那么整个流程就可以看作是handler往消息队列中添加消息,looper再循环获取这些消息。

原文地址:https://www.cnblogs.com/zhujiabin/p/4258922.html