消息机制

消息机制

主线程创建后Looper.prepare创建lopper对象,创建looper的同时或创建消息队列
messagequeue,通过ThreadLocal与当前线程绑定,并把消息队列最为成员变量,创建handler对象的时候会从当前线程中获取loopper对象的消息队列,发送消息就是往消息对象中加入新消息,looper.loop开启死循环,从消息队列中查询到消息,交给hanlder的handmessage处理,当调用mHandler.getLooper().quit()时候死循环才会终止,明白上述原理我们可以在向子线程发送消息,不过android里的handler不是另外开启线程来执行的,还是在主UI线程中,如果想另启线程的话需要用到HandlerThread来实现。在使用HandlerThread的时候需要实现CallBack接口以重写handlerMessage方法,在handlerMessage方法中来处理自己的逻辑。下来给出一个小例子程序。

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

public class TestActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        MyHandlerThread handlerThread = new MyHandlerThread("子线程");
        handlerThread.start();

        Handler handler = new Handler(handlerThread.getLooper(), handlerThread);

        handler.postDelayed(() -> {
            Message message = handler.obtainMessage();
            message.arg1 = 1;
            message.sendToTarget();
        }, 3000);
    }

    class MyHandlerThread extends HandlerThread implements Handler.Callback {

        public MyHandlerThread(String name) {
            super(name);
        }

        @Override
        public boolean handleMessage(Message msg) {
            //打印线程的名称
            System.out.println(" handleMessage CurrentThread = " + msg.arg1 + Thread.currentThread().getName());
            return false;
        }
    }
}

2跨进程通信

广播 aidl messenger。。。看我的另外一篇文章
end

你可能感兴趣的:(消息机制)