美文网首页
消息机制

消息机制

作者: niudeyang | 来源:发表于2018-04-11 11:29 被阅读5次

    消息机制

    主线程创建后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

    相关文章

      网友评论

          本文标题:消息机制

          本文链接:https://www.haomeiwen.com/subject/haeahftx.html