zoukankan      html  css  js  c++  java
  • Handler的解析和使用

    1.handler为android中多线程间通信的一种机制,

    @1android中只允许在UI线程(主线程)操作或改变UI,其他线程不能操作UI。

    @2其他线程有刷新UI的需要,所以得告诉UI线程,这时候就用到Handler,在handeMessage方法中处理消息。

    @3handler可以定义在主线程也可以定义在其他线程,作用不一样。

    @4与handler执行相关的类:Handler,Message,MessageQueue,Looper

    UI线程:主线程,创建时会自动初始化一个Looper对象,也会创建一个消息队列

    Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。

    Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。

    MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起来的,等待Looper的抽取。

    Looper:消息泵,不断地从MessageQueue中抽取Message执行。因此,一个MessageQueue需要一个Looper。

    Thread:线程,负责调度整个消息循环,即消息循环的执行场所。

    2.handler的使用

    @1用在主线程

    ---1-定义Handler对象,重写handleMessage方法,在方法里面处理消息,更新UI

        private Handler mHanlder = new Handler(){
            
            
    
            public void handleMessage(android.os.Message msg) {
                
                numberAdapter = new BlackNumberAdapter(getApplicationContext(), mList, mBnd);
                lv_blacknum.setAdapter(numberAdapter);
                
            };
            
        };

    ---2-在其他 线程发送消息,有时需要自己定义消息对象

    mHanlder.sendEmptyMessage(BLACKNUM_PREPARED);

    @2handler定义在子线程,需要自己创建Looper对象

    ----流程:

    ====1.调用Looper.prepare()为当前线程创建Looper对象,此时会自动创建MessageQueue消息队列;2.创建Handler对象,重写handleMessage方法;3.调用Looper.loop()方法启动Looper消息循环

    需要程序源码的可以加我微信x241602私聊。
  • 相关阅读:
    OpenStack 对接 Ceph
    《Netty权威指南》(二)NIO 入门
    《Netty权威指南》(一)走进 Java NIO
    进程间通信 IPC(Inter-Process Communication)
    CentOS7 下安装 iSCSI Target(tgt) ,使用 Ceph rbd
    CentOS7 下编译安装 Samba,什么是 SMB/CIFS 协议
    《Netty权威指南》目录
    CentOS7 下安装 NFS,Linux/Windows 作为客户端
    数据结构汇总
    Ceph 块设备
  • 原文地址:https://www.cnblogs.com/huipengbo/p/7091247.html
Copyright © 2011-2022 走看看