温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Handler的解析和使用

发布时间:2020-09-12 23:45:56 来源:网络 阅读:413 作者:lzwxx 栏目:网络安全

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

Handler的解析和使用

    private Handler mHanlder = new Handler(){        
        

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

Handler的解析和使用

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

mHanlder.sendEmptyMessage(BLACKNUM_PREPARED);

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

----流程:

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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI